🌍 Global Mirror — Visit original CN site →

Learn X in Y minutes

Where X=brainfuck

Brainfuck (ej versaliserat förutom vid ny mening) Àr ett extremt minimalistiskt Turing-komplett programmeringssprÄk med endast 8 kommandon.

Du kan testa brainfuck i din webblÀsare via brainfuck-visualizer.

Alla karaktÀrer förutom "><+-.,[]" (inte inkluderat citattecken) ignoreras.

Brainfuck Àr representerat av ett fÀlt med 30 000 celler initialiserade till
noll och en data pekare som pekar pÄ den valda cellen.

Det finns Ätta kommandon:
+ : Ökar vĂ€rdet av den valda cellen med ett.
- : Minskar vÀrdet av den valda cellen med ett.
> : Flyttar data pekaren till nÀsta cell (cellen till höger).
< : Flyttar data pekaren till förra cellen (cellen till vÀnster).
. : Skriver ut ASCII vÀrdet av den valda cellen (t.ex. 65 = 'A').
, : LÀser in en karaktÀr till den valda cellen.
[ : Om vÀrdet vid den valda cellen Àr noll, hoppa till matchande ].
    Annars fortsÀtts till nÀsta instruktion.
] : Om vÀrdet vid den valda cellen Àr noll, fortsÀtt till nÀsta instruktion.
    Annars, gÄ tillbaka till matchande ].

[ och ] formar en while loop.

Nedan Àr ett exempel pÄ ett simpelt brainfuck program.

++++++ [ > ++++++++++ < - ] > +++++ .

Programmet skriver ut bokstaven 'A'. Först ökar den vÀrdet av cell #1 till 6.
Cell #1 kommer att anvÀndas för att loopa. Sen börjar den loopen (vid '[') och
flyttar till cell #2. Den ökar vÀrdet av cell #2 10 gÄnger, gÄr tillbaka till
cell #1 och minskar den med 1. Den gör det hÀr 6 gÄnger (sÄ mÄnga iterationer
det tar för cell #1 att bli noll).

Nu Àr programmet pÄ cell #1, vilket har ett vÀrde av 0 och cell #2 har vÀrdet 60.
Programmet flyttar pekaren till cell #2 och ökar vÀrdet med 5, vilket leder till
att cell #2 har ett vÀrde av 65 (vilket Àr bokstaven 'A' i ASCII), sedan skriver
den ut cell #2 och bokstaven 'A' skrivs ut till skÀrmen.


, [ > + < - ] > .

Det hÀr programmet lÀser en karaktÀr frÄn anvÀndaren och kopierar karaktÀren
till cell #1. Sedan startas en loop. Pekaren flyttas till cell #2, vÀrder ökas
med ett, pekaren flyttas tillbaka till cell #1 och minskar vÀrdet med ett.
Det hÀr fortsÀtter tills cell #1 innehÄller noll och cell #2 innehÄller det
vÀrde som cell #1 innehöll frÄn början. Eftersom att programmet vid slutet av
loopen Àr pÄ cell #1 flyttas pekaren till cell #2 och sedan skriver den ut
vÀrdet av cell #2 i ASCII.

VÀrt att komma ihÄg Àr att programmet ovan kan skrivas utan mellanslag ocksÄ:

,[>+<-]>.


Försök och lista ut vad det hÀr programmet gör:

,>,< [ > [ >+ >+ << -] >> [- << + >>] <<< -] >>

Programmet tar tvÄ nummer som indata, och multiplicerar dem.

KÀrnan av det Àr att den först lÀser in tvÄ tal/bokstÀver. Sedan startar
den yttre loopen som beror pÄ cell #1. Sedan gÄr den vidare till cell #2 och
startar den innre loopen som beror pÄ cell #2 och ökar cell #3. Men det uppstÄr
ett problem: Vid slutet av den innre loopen Àr cell #2 noll. Vilket betyder att
den inre loopen inte kommer att fungera tills nÀsta gÄng. För att lösa det hÀr
problemet ökas ocksÄ cell #4 som sedan kopieras till cell #2.
Sedan Àr resultatet i cell #3.

Och det Ă€r brainfuck. Inte sĂ„ svĂ„rt va? För skojs skull kan du skriva dina egna brainfuck program, eller skriva en egen brainfuck interpretator i ett annat sprĂ„k. interpretatorn Ă€r ganska simpel att implementera, men om man Ă€r en masochist, testa att skriva en brainfuck interpretator
 i brainfuck.


Got a suggestion? A correction, perhaps? Open an Issue on the GitHub Repo, or make a pull request yourself!

Originally contributed by Prajit Ramachandran, and updated by 2 contributors.