Skip to content

BrainFuck

Inofficial BF logo
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:

  1. > Flytt peikar mot høgre
  2. < flytt peikar til venstre
  3. + legg til ein til cella peikaren står på
  4. – trekk fra en på cella peikeren står på
  5. , les inn frå tastatur
  6. . skriv ut verdi av celle til skjerm
  7. [ loop
  8. ] 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!

[Digg] [Reddit] [Google] [StumbleUpon]

{ 1 } Comments

  1. Kent Vegard | 20070821 at 22:30 | Permalink

    Oh, I’m fucked …

Post a Comment

Your email is never published nor shared. Required fields are marked *