Domů » Informatika » Programovací jazyk » Jazyk Brainfuck


Jazyk Brainfuck

Programovací jazyk Brainfuck patří mezi ezoterické jazyky, určené k pobavení a zamyšlení programátorů. Navrhl jej v roce 1993 švýcarský programátor Urban Müller a obsahuje pouze 8 příkazů. Každý příkaz je reprezentován právě jedním znakem, neznámé znaky jsou ignorovány. Brainfuck je Turingovsky úplný a formálně je tedy stejně silný jako ostatní programovací jazyky, například C nebo Java.

Seznam příkazů

Programovací jazyk Brainfuck obsahuje celkem 8 příkazů. Každý z nich se zapisuje právě jedním znakem ASCII. Má k dispozici pole buněk o zadané velikosti (obvykle 30000), které je na počátku vynulováno. Každá buňka může nabývat hodnot 0–255 (rozsah je tedy jeden bajt). Aktuální buňku určuje tzv. datový ukazatel.

Příkaz Význam
< Přesune datový ukazatel o jednu buňku vlevo
> Přesune datový ukazatel o jednu buňku vpravo
+ Inkrementuje hodnotu v aktuální buňce
Dekrementuje hodnotu v aktuální buňce
. Vypíše hodnotu v aktuální buňce (obvykle jako odpovídající znak ASCII)
, Načte hodnotu na vstupu do aktuální buňky (obvykle ASCII hodnotu zadaného znaku)
[ Je-li hodnota v aktuální buňce různá od 0, přesune instrukční ukazatel na odpovídající pravou závorku
] Je-li hodnota v aktuální buňce rovna 0, přesune instrukční ukazatel na odpovídající levou závorku

Program „Hello World!“

Triviální verze

kód v jazyce BF - Zobrazit

  1. +++++ +++++ +++++ +++++ +++++
  2. +++++ +++++ +++++ +++++ +++++
  3. +++++ +++++ +++++ +++++ ++ .
  4. +++++ +++++ +++++ +++++ +++++
  5. ++++ .
  6. +++++ ++ ..
  7. +++ .
  8. ----- ----- ----- ----- -----
  9. ----- ----- ----- ----- -----
  10. ----- ----- ----- ----- -----
  11. ----- ----- .
  12. +++++ +++++ +++++ +++++ +++++
  13. +++++ +++++ +++++ +++++ +++++
  14. +++++ +++++ +++++ +++++ +++++
  15. +++++ +++++ +++++ +++ .
  16. ----- --- .
  17. +++ .
  18. ----- - .
  19. ----- --- .
  20. ----- ----- ----- ----- -----
  21. ----- ----- ----- ----- -----
  22. ----- ----- ----- -- .
  23. ----- ----- ----- ----- .
  24. --- .
Optimalizovaná verze

Využitím cyklů lze kód značně zkrátit.

kód v jazyce BF - Zobrazit

  1. ++++++++++[>+++++++>++++
  2. ++++++>+++>+<<<<-]>++.>+
  3. .+++++++..+++.>++.<<++++
  4. +++++++++++.>.+++.------
  5. .--------.>+.>.

Jednoduché programy

Nulování aktuální buňky

kód v jazyce BF - Zobrazit

  1. [-]
Vyhledání první nenulové buňky

Dopředné hledání (fast forward):

kód v jazyce BF - Zobrazit

  1. [>]<

Zpětné hledání (rewind):

kód v jazyce BF - Zobrazit

  1. [<]>
Sčítání

Nechť buňka #0 obsahuje první sčítanec a buňka #1 druhý. Po skončení následující cyklu bude v buňce #0 nula a v buňce #1 součet.

kód v jazyce BF - Zobrazit

  1. [->+<]

SLožitější programy

Interpreter

kód v jazyce BF - Zobrazit

  1. >>>+[[-]>>[-]++>+>+++++++[<++++>>++<-]++>>+>+>+++++[>++>++++++<<-]+>>>,<++[[>[
  2. ->>]<[>>]<<-]<[<]<+>>[>]>[<+>-[[<+>-]>]<[[[-]<]++<-[<+++++++++>[<->-]>>]>>]]<<
  3. ]<]<[[<]>[[>]>>[>>]+[<<]<[<]<+>>-]>[>]+[->>]<<<<[[<<]<[<]+<<[+>+<<-[>-->+<<-[>
  4. +<[>>+<<-]]]>[<+>-]<]++>>-->[>]>>[>>]]<<[>>+<[[<]<]>[[<<]<[<]+[-<+>>-[<<+>++>-
  5. [<->[<<+>>-]]]<[>+<-]>]>[>]>]>[>>]>>]<<[>>+>>+>>]<<[->>>>>>>>]<<[>.>>>>>>>]<<[
  6. >->>>>>]<<[>,>>>]<<[>+>]<<[+<<]<]
  7. [input a brainfuck program and its input, separated by an exclamation point.
  8. Daniel B Cristofani (cristofdathevanetdotcom)
  9. http://www.hevanet.com/cristofd/brainfuck/]

Reference