Brainfuck er et rart, og rimelig enkelt programmeringsspråk, bygd opp rundt turing-maskina. Det opererer i et cellesystem, som du kan forflytte deg i. Du kan lese ting fra celler, skrive til celler, endre verdi av celler, og loope.
Syntax er rimelig enkelt, med 6 kommandoer og to kontrollsekvenser:
- > Flytt peikar mot høgre
- < flytt peikar til venstre
- + legg til ein til cella peikaren står på
- – trekk fra en pÃ¥ cella peikeren stÃ¥r pÃ¥
- , les inn frå tastatur
- . skriv ut verdi av celle til skjerm
- [ loop
- ] end of loop
[ ] funker på den måten at den vil bevege seg mellom [ og ] inntil den treffer på ] og cella den står i er null. Det kan vi utnytte. Ei av dei enklaste løkkene er [-] som vil slette innhaldet i cella. Funksjonen er at den vil trekke fra en i cella inntil cella er 0. Når cella er 0, så hopper den ut av løkka.
Et anna eksempel er +[.+] som vil printe heile asciitabellen. Den sette peikeren til en, går inn i løkke, skriver ut, inkrementerer cella og printer på ny, inntil den når null på nytt.
Dei fleste brainfuck-implementasjoner tolker 10 i ei celle som linjeskift, og kan brukast til å få linjeskift.
Brainfuck er ikkje praktisk brukbart, men eg synst det er artig for å få forståelse for korleis datamaskiner fungerer. Vel verdt å ta en kik på. Her er et par ressurser:
char m[9999],*n[99],*r=m,*p=m+5000,**s=n,d,c;main(){for(read(0,r,4000); c=*r;r++)c-']'||(d>1||(r=*p?*s:(--s,r)),!d||d--),c-'['||d++||(*++s=r),d|| (*p+=c=='+',*p-=c=='-',p+=c=='>',p-=c=='<',c-'.'||write(2,p,1),c-','||read(2,p,1));}
C-kode for å tolke brainfuck. Det er denne inteprenteren eg bruker, og den funker knall. Syntax er da ./brainfuck < brainfuckprogram.bf
Javascript Brainfuck inteprenter for dei som ikkje har tilgang på C-compiler.
Lykke til med brainfuck!
Oh, I’m fucked …