Z pogranicza

Brainfuck by Faszczu PL

<brainfuck by="by" faszczu="Faszczu" pl="PL">


[Wstep]
Brainfuck jest to stworzony okolo 1993 roku jezyk programowania o prostej
skladni. Jego ojcem jest Urban Müller ktorego celem bylo stworzenie dla zabawy
jezyka o mozliwie malym kompilatorze zdolnego obsluzyc maszyne Turinga.
Podczas swojej pracy inspirowal sie jezykiem False. Pierwszy kompilator
Brainfucka napisany zostal na Amige i zajmowal jedynie 240bajtow.
Nazwa tego jezyka wziela sie ze stopnia trudnosci programowania w nim.
Do napisania nawet prostej aplikacji trzeba sie czasem niezle naglowic o czym
sie wkrotce przekonasz.


[Srodowisko]
Miejscem naszej pracy jest jednowymiarowa tablica majaca dlogosc 30 000
komorek. Kazda z tych komorek posiada rozmiar byte, czyli mozna ja wypelnic
liczba z zakresu od 0 do 255. W przypadku przekroczenia ktorejs z tych wartosci
poprostu wracamy na przeciwna strone. Czyli dodajac jeden do 255 otrzymujemy 0,
lub odejmujac od 0 jeden uzyskujemy 255, to samo dzieje sie z numerami komorek.


[Skladnia]
W Brainfucku do dyspozycji mamy tylko 8 instrukcji. Kazda z nich
reprezentowana jest przez jeden znak.

Sa to:
+ zwiekszenie wartosci komorki o 1
- zmniejszenie wartosci komorki o 1
> przejscie do nastepnej komorki
< przejscie do wczesniejszej komorki
. wyswietlenie znaku
, pobranie znaku
[ rozpoczecie petli
] zamkniecie petli

Sadze, ze pierwszych 4 instrukcji tlumaczyc nie trzeba.
'.' powoduje wyswietlenie na ekranie znaku zgodnie z tablica ASCII. Wartosc
komorki w ktorej sie znajdujemy okresla numer wyswietlonego znaku.
',' powoduje pobranie od uzytkownika wartosci w zaleznosci od wcisnietego
klawisza i umieszczenie jej w komorce w ktorej sie obecnie znajdujemy.
'[]' tworzy pelte. Instrukcje znajdujace sie pomiedzy nawiasami beda wykonywane
do momentu w ktorym wartosc komorki w ktorej sie znajdujemy nie wyniesie 0.


[Przyklady]
Teraz czas na przeanalizowanie kilku prostych przykladow ktore pomoga ci lepiej
zrozumiec opisane wczesniej rzeczy.

'+[,.]' - ten krotki program bedzie wypisywal wcisniete przez ciebie znaki.
+ zwieksza wartosc komorki o 1 by mogla sie rozpoczac petla, w petli natomiast
pobieramy z klawiatury znak ',' i wyswietlamy go '.'. Petla ta bedzie sie
wykonywac w nieskonczonosc poniewaz nie jestesmy w stanie wcisnac znaku o
numerze 0 by zakonczyc petle.

',>,<[>+<-]>.' - ten kod natomiast zsumuje dwie podane przez ciebie wartosci.
',>,<' pobiera od ciebie dwie wartosci umieszczjac je w sasiadujacych komorkach
i wraca do komorki poczatkowej.
'[>+<-]' przejdzie do drugiej komorki, doda do niej jeden, cofnie sie do
poczatkowej i odejmie z niej jeden. Bedzie sie wykonywac dopuki wszystkie
wartosci z komorki pierwszej nie znajda sie w komorce drugiej.
'>.' przejdzie do komorki w ktorej znajduje sie nasza suma i wyswietli ja.

'++++++[>++++++++++++<-]>.<++++++[>+++++<-]>-.+++++++..+++.' to ostatni
przyklad ktory wypisze na ekranie 'Hello'.
'++++++[>++++++++++++<-]' jest prostym mnozeniem w petli, do drugiej komorki
dodana zostanie 6 razy wartosc 12. Spowoduje to ustawienie w drugiej komorce
wartosci 72 co odpowiada znakowi 'H'.
Po wyswietleniu go '>.<' wroci do pierwszej komorki by '++++++[>+++++<-]'
wykonal kolejne mnozenie. Jako ze nie da sie nim dojsc do pozadanej wartosci
musimy przed wyswietleniem odjac jeden '>-.'. W ten sposob uzyskujemy litere
'e'. Ten kod natomiast '+++++++..+++.' zwieksza wartosc komorki do litery 'l',
wyswietla ja dwa razy oraz przechodzi do 'o' rowniez je wyswietlajac.


[Zakonczenie]
To by bylo na tyle. Mam nadzieje, ze moj artykul pomogl ci pojac zasady
rzadzace Brainfuckiem. Zycze milej zabawy w programowaniu.

20 komentarzy

test30 2010-01-10 00:41

bfmachine ide

kudlaty1125 2008-03-10 13:20

o brainfucku już dawno temu słyszałem, ale ten tekst jest dobry
brain fuck polecam

fatalbomb 2007-02-18 22:20

Może ktoś da kurs jak pisać w fuckfuck? To w sumie podobne, ale zamiast symboli są angielskie bluzgi... lol...

avas 2006-07-01 12:59

Jak lubicie takie twory to polecam malbolge http://pl.wikipedia.org/wiki/Malbolge buhahahaha :D

ic3 2004-12-29 16:54

+++++++++++++[>+++++<-]>++++++++.+++++++++++.-.
<+++++[>----------<-]>-.[>++<-]>+++.<+++++++[>+
+<-]>--..---.[>+<--]>-----...  :))) W sumie nic sie tym nie da zrobic =( zeby mozna bylo uzyc troszq wiecej znaczkow =], moze jakies read/write file =}, wirusy w brainfucq by powstaly LOL ! :)

szopenfx 2005-11-01 21:36

jak napisze swój system to zamiast *.bat będzie *.brf :P buahahahaha

Vogel 2004-06-14 13:45

Ta... Whitespace jest lepsze... 8 znaków to przecież 3 bity, w Whitespace korzystamy z 3 znaków - to 2 bity :)

Faszczu 2004-06-13 16:13

Nie wystarcza ci to co ja napisalem? Jest tu chyba wszystko.

nav 2004-06-13 12:11

zajebist* jezyk -juz sie ucze!!
ma ktos jakies kursy??

Kaczor 2004-06-11 19:06

fajne, fajne...

kubARek 2004-06-11 16:34

no nie powiem :P
jezyk niczego sobie, tylko nieco trudny :D

Drajwer 2004-06-11 11:24

wiecej opisow;]

Drajwer 2004-06-10 22:53

jebacz musku ... banalny pomysl - brainfuck r0x

xeryph 2004-06-10 22:49

ten jezyk zostal chyba stworzony aby pokazac ze programowanie moze byc trudne :P

a_s_f 2004-06-10 22:47

Nawet fajny ten jeb*** mozgu:)

Faszczu 2004-06-10 22:12

Prosze cie bardzo: <url>http://esoteric.sange.fi/brainfuck/</url>
Do wyboru do koloru :-P

CooBek 2004-06-10 21:34

łaa!! spodobał mi sie ten język %) Do tego ta podkreślająca nastrój nazwa ;d ymm.. Faszczuu! Gdzie moge zessać kompilator? :)

KiteK 2004-06-12 16:14

Hehe :P, jaka beka :P podoba mi się to, bardzo fajny miał ktoś pomysł :P

Marooned 2004-06-11 13:25

1) Faszczu - jesteś tu tak długo i nadal nie wiesz, że w artykułach przestrzegamy pisania z polskimi znakami :)
2) art dobry, czytelny i ciekawy
3) ciekawe, kto pokusi się o podobny w Whitespace (i jak wyświetli kody źródłowe [green])