Brainfuck to ezoteryczny język programowania, stworzony przez Urbana Müllera około roku 1993. Nazywany też czasem Brainf*ck, Brainf***, lub po prostu BF.
Język opiera się o model maszyny Turinga, składającej się, oprócz programu, taśmy zainicjalizowanej zerami, oraz głowicy (wskaźnika) do tej taśmy.
Brainfuck zawiera 8 następujących jednoznakowych instrukcji :
Znak | Znaczenie |
---|---|
> | przesuwa głowicę w prawo |
< | przesuwa głowicę w lewo |
+ | zwiększa o 1 bajt w bieżącej pozycji |
- | zmniejsza o 1 bajt w bieżącej pozycji |
. | wyświetla znak w bieżącej pozycji(ASCII) |
, | pobiera znak i wstawia go w bieżącej pozycji(ASCII) |
[ | skacze do odpowiadającego mu jeśli w bieżącej pozycji znajduje się 0 |
] | skacze do odpowiadającego mu [ |
# | Punkt wstrzymania, pułapka (breakpoint) |
Przy czym „bieżąca pozycja” oznacza element w taśmy wskazywany przez glowicę. Wszystkie inne znaki są ignorowane, co jest przydatne przy pisaniu komentarzy.
Easy ,dialekt BrainFucka, posiada dodatkowo makroinstrukcję ':' która powoduje, że dane wczytywane z wejścia są traktowane jako dalsza część kodu programu (interpretacja następuje w locie), można do osiągnąć za pomocą kodu: Wersja najkrótsza
>>>+[[-]>>[-]++>+>+++++++[<++++>>++<-]++>>+>+>+++++[>++>++++++<<-]+>>>,<++[[>[ ->>]<[>>]<<-]<[<]<+>>[>]>[<+>-[[<+>-]>]<[[[-]<]++<-[<+++++++++>[<->-]>>]>>]]<< ]<]<[[<]>[[>]>>[>>]+[<<]<[<]<+>>-]>[>]+[->>]<<<<[[<<]<[<]+<<[+>+<<-[>-->+<<-[> +<[>>+<<-]]]>[<+>-]<]++>>-->[>]>>[>>]]<<[>>+<[[<]<]>[[<<]<[<]+[-<+>>-[<<+>++>- [<->[<<+>>-]]]<[>+<-]>]>[>]>]>[>>]>>]<<[>>+>>+>>]<<[->>>>>>>>]<<[>.>>>>>>>]<<[ >->>>>>]<<[>,>>>]<<[>+>]<<[+<<]<]
Wersja najszybsza
>>>>>+[->>++>+>+++++++[<++++>>++<-]++>>+>+>+++++[>++>++++++<<-]+>>>,<++[[>[->> ]<[>>]<<-]<[<]<+>>[>]>[<+>-[[<+>-]>]<[[[-]<]++<-[<+++++++++>[<->-]>>]>>]]<<]>[ -]+<<[--[[-]>>->+<<<]>>[-<<<<[>+<-]>>>>>>+<]<<]>>[-]<<>>>[<<<+>>>-]<<<]>>>+<<< <[<<]>>[[<+>>+<-]+<-[-[-[-[-[-[-[->->>[>>]>>[>>]<+<[<<]<<[<<]<]>[->>[>>]>>[>>] <,<[<<]<<[<<]]<]>[->>[>>]>>[>>]<-<[<<]<<[<<]]<]>[->>[>>]>>[>>]<.<[<<]<<[<<]]<] >[->>[>>]>>[>>]<<-<<[<<]<<[<<]]<]>[->>[>>]>>[>>]+[<<]<<[<<]]<]>[->>[>>]>>[>>]< [>+>>+<<<-]>[<+>-]>>[<<+>>[-]]+<<[>>-<<-]>>[<<+>>>>+<<-]>>[<<+>>-]<<[>>+<<-]+> >[<<->>-]<<<<[-<<[<<]<<[<<]<<<<<++>>]>>[-<<<<<<[<<]<<[<<]<]>]<]>[->>[>>]>>[>>] <[>+>>+<<<-]>[[<+>-]>>[-]+<<]>>[<<+>>>>+<<-]>>[<<+>>-]<<[>>+<<-]+>>[<<->>-]<<< <[-<<[<<]<<[<<]<<<<<+>>]>>[-<<<<<<[<<]<<[<<]<]>]>[<+>-]<<<<<<[>>+<<-[->>->>+[> >>[-<+>>+<]+<-[-[[-]>[-]<]>[-1<<<+>>>]<]>[-<<<->>>]>[-<+>]<<<<[>>+<<-]>>]<<<<< <]>>[-<<+[>>>[-<+>>+<]+<-[-[[-]>[-]<]>[-1<<<->>>]<]>[-<<<+>>>]>[-<+>]<<<<[<<+> >-]<<]]]>>>>>>>]