Brainfuck

From Wikipedia, the free encyclopedia

Brainfuck (jodecerebros), ye un llinguaxe de programación esotéricu, diseñáu por Urban Müller en 1993, coles mires de faer un llinguaxe que fuera al empar bien simple, Turing completu y que riquiera un compilador pequeñu. Müller basó Brainfuck na máquina de Turing y sirviólu d'inspiración el compilador de 1024 bytes de tamañu del llinguaxe FALSE.

Datos rápidos Desendolcador(es), Estensión de ficheru ...
Brainfuck
Desendolcador(es) Urban Müller
Estensión de ficheru .b .bf
Versión inicial 1993
Formatu de ficheru de llectura Brainfuck file (en)
Formatu de ficheru d'escritura Brainfuck file (en)
Tipu Llinguaxe de programación esotéricu, Turing tarpit (en) y llinguaxe de programación
Orixe del nome cerebru y fuck
Más información
Sitiu web Web oficial
Etiqueta de Stack Exchange Stack Exchange
Zarrar

La distribución clásica ye la versión 2 escrita por el mesmu Müller, conteniendo un compilador pal ordenador Amiga, un intérprete, programes d'exemplu y un documentu "readme".

Diseñu del llinguaxe

El llinguaxe basar nun modelu d'execución simple que consiste, amás del programa, d'un vector de (siquier) 30.000 bytes inicializados a cero, un piqueru sobre esi vector (que al empiezu de la execución apunta al primer elementu del vector) y dos "corrientes" de bytes pa la entrada y la salida.

Les Instrucciones

Hai solu ocho instrucciones, y toes son d'un calter.

Más información Calter, Significáu ...
Calter Significáu
> Amonta'l punteru.
< Decrementa el punteru.
+ Amonta'l byte apuntáu.
- Decrementa el byte apuntáu.
. Escribe'l byte apuntáu nel fluxu de salida.
, Lee un byte del fluxu d'entrada y almacenar nel byte apuntáu.
[ Avanza a la instrucción darréu posterior al ] correspondiente si'l byte anguaño apuntáu ye nulu (si ye 0).
] Recula a la instrucción darréu posterior al [ correspondiente si'l byte anguaño apuntáu nun ye nulu (si ye distintu de 0).
Zarrar
Traducción a otros llinguaxes

Los programes de Brainfuck pueden traducise a C y Perl con estes substituciones, suponiendo que ptr seya del tipu unsigned char*. Sicasí, tienen los sos propios traductores.

Más información C, Perl ...
brainfuck C Perl
>++ptr;$pointer++;
<--ptr;$pointer--;
+++*ptr;$tape[$pointer]++;
---*ptr;$tape[$pointer]--;
.putchar(*ptr);print chr$tape[$pointer];
,*ptr=getchar();$tape[$pointer]=ord(<>);
[while (*ptr) {while($tape[$pointer]){
]}}
Zarrar

Exemplos

Hola Mundu!

Esti sería'l típicu programa qu'escribe "Hola mundu!"

 
 ++++++++++
 [ Bucle pa empecipiar les memories (repitir 10 vegaes)
 >+++++++>++++++++++>+++++++++++>+++>+<<<<<-
 70 100 110 30 10
 ]
 >++. imprime 'H' (72) 1
 >>+. imprime 'o' (111) 3
 ---. 'l' (108) 3
 <---. 'a' (97) 2
 >>++. espaciu (32) 4
 <+. 'm' (109) 3
 ++++++++. 'o' (117) 3
 -------. 'n' (110) 3
 <+++. 'd' (100) 2
 >+. 'o' (111) 3
 >+. '!' (33) 4
 >. '\n' (10) 5

El correspondiente códigu "Hello World!" escribiríase, nuna sola llinia:

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

yá que nun-y afecten los espacios, les tabulaciones o los saltos de llinia.

El xuegu de la vida
 
 Linus Akesson presents:
 The Game Of Life implemented in Brainfuck

 +>>++++[<++++>-]<[<++++++>-]+[<[>>>>+<<<<-]>>>>[<<<<+>>>>>>+<<-]<+
 +++[>++++++++<-]>.[-]<+++[>+++<-]>+[>>.+<<-]>>[-]<<<++[<+++++>-]<.<<[>>>>+
 <<<<-]>>>>[<<<<+>>>>>>+<<-]<<[>>>>.+<<<++++++++++[<[>>+<<-]>>[<<+>>>>>++++++++
 +++<<<-]<[>+<-]>[<+>>>>+<<<-]>>>[>>>>>>>>>>>>+>+<< <<<<<<<<<<<-]>>>>>>>>>>
>>[-[>>>>+<<<<-]>[>>>>+<<<<-]>>>]> >>[<<<+>> >- ]<<<[>>+>+<<<-]>[->[<<<
<+>>>>-]<[<<< <+> >>>-]<<<< ]< ++++++ ++ +[>+++++<-]>>[<<+>>-]<
<[>---<-]>.[- ] <<<<<<<<< < <<<<<< < -]++++++++++.[-]<-]>>>
>[-]<[-]+++++ +++[>++++ ++++< - ]>--.[-]<,----------[<+
>-]>>>>>>+<<<<< < <[>+>>>>>+>[ -]<<< << <<-]>++++++++++>>>>>[[-]
<<,<<<<<<<->>>> > >>[<<<<+>>>>-]<<<<[>>>>+ >+<<<<<-]>>>>>----------[<<<<
<<<<+<[>>>>+<<< <-]>>>>[<<<<+>>>>>>+<<- ]>[>-<-]>++++++++++[>+++++++++
++<-]<<<<<<[>>> >+<<<<-]>>>>[<<<<+>>>>> >+<<-]>>>>[<<->>-]<<++++++++++
[>+<-]>[>>>>>>> >>>>>+>+<<<< <<<<< <<<<-]>>> >> >>>>>>>[-[>>>
>+<<<<-]>[>>>> +<<<<-]>> > ]>> > [<< < +>>>-]+<<<[>
>>-<<<-]>[->[< <<<+>>>>-] <[ < < < <+>>>>-]<<<
<]<<<<<<<<<<<, [ -]]>]>[-+++ ++ + +++ ++[>+++++++
++++>+++++++++ + +<<-]>[-[>>> +<<<- ]>>>[ < <<+ >>>>>>>+>+<
<<<<-]>>>>[-[> > >>+<<<<-]>[> >>>+< < <<-]> > >]> >>[<<<+>>>-
]<<<[>>+>+<<< - ]>[->[<<<<+> >>>-] < [<<< < +>> >>-]<<<<]<<
<<<<<<[>>>+<< < -]>>>[<<<+>> >>>>> + >+<< < <<-]<<[>>+<<
-]>>[<<+>>>>> >+>+<<<<<-]>> >>[-[ > >>>+ < <<<-]>[>>>>+<
<<<-]>[>>>>+< <<<-]>>]>>>[ - ]<[>+< - ]<[ - [<<<<+>>>>-]<<<
<]<<<<<<<<]<< <<<<<<<<++++ + +++++ [ >+++ + ++++++[<[>>+<<-]>>[<<+
>>>>>++++++++ + ++<<< -] < [>+<- ] >[<+ > >>>+<<<-]>>>[<<<+>>>-]
<<<[>>>+>>>> > +<<<< << <<-]> > >>>> >>>[>>+<<-]>>[<<+<+>>
>-]<<<------ - -----[ >> >+<<< - ]>>> [<<<+> > >>>>>+>+<<<<
<-]>>>>[-[>> > >+<<<< -] > [>>>> + <<<<- ]>>> ] >>>[<<<+>>>-
]<<<[>>+>+<< < -]>>> >> > > [<<<+ >>>-]<<<[>>>
+<<<<<+>>- ]> > >>>>>[< <<+>>>-]<<<[>
>>+<<<<<<< <<+ > >>>>>-]< <<<<<<[->[<<<<+
>>>>-]<[<<<<+>>>>-]<<<<]>[<<<<<< <+>>> >>>>-]<<<< <<<<<+++++++++++[>
>>+<<<-]>>>[<<<+>>>>>>>+>+<<<<<-]>>>>[-[> >>>+<<<<-]>[>>>>+<<<<-]>>>]>>>[<<<
+>>>-]<<<[>>+>+<<<-]>>>>>>>[<<<+>>>-]<<<[ >>>+<<<<<+>>-]>>>>>>>[<<<+>>>-]<<<
[>>>+<<<<<<<<<+>>>>>>-]<<<<<<<[->[< < < <+>>>>-]<[<<<<+>>>>-]<<<<]>[<<<<<<<
+>>>>>>>-]<<<<<<<<<+++++++++++[>>> > >>>+>+<<<<<<<<-]>>>>>>>[-[>>>>+<<<<-
]>[>>>>+<<<<-]>>>]>>>[<<<+>>>-]<<< [ >>+>+<<<-]>>>>>>>[<<<+>>>-]<<<[>>>+<<
<<<+>>-]>>>>>>>[<<<+>>>-]<<<[>>>+< <<<<<<<<+>>>>>>-]<<<<<<<[->[<<<<+>>>>-
 ]<[<<<<+>>>>-]<<<<]>[<<<<<<<+>>>>> >>-]<<<<<<<----[>>>>>>>+<<<<<<<+[>>>>>
 >>-<<<<<<<[-]]<<<<<<<[>>>>>>>>>>>>+>+<<<<<<<<<<<<<-][ lft@df.lth.se ]>>>>>
 >>>>>>>[-[>>>>+<<<<-]>[>>>>+<<<<-]>[>>>>+<<<<-]>>]>>>[-]<[>+<-]<[-[<<<<+>>
 >>-]<<<<]<<<<<<[-]]<<<<<<<[-]<<<<-]<-]>>>>>>>>>>>[-]<<]<<<<<<<<<<]

 Type for instance "fg" to toggle the cell at row f and column g
 Hit enter to calculate the next generation
 Type q to quit
Triángulu de Sierpinski
 
[ This program prints Sierpinski triangle on 80-column display. ]
 >
 + +
 + +
 [ < + +
 + +
 + + + +
 > - ] >
 + + + + + + + +
 [ >
 + + + +
 < - ] >
 > + + > > > + >
 > > + <
 < < < < < < < <
 < [ - [ - > + <
 ] > [ - < + > > > . < < ] > > >
 [ [
 - > + +
 + + + +
 + + [ > + + + +
 < - ] >
 . < < [ - > + <
 ] + > [ - > + +
 + + + + + + + + < < + > ] > . [
 - ] > ]
 ] + < < < [ - [
 - > + < ] + > [
 - < + > > > - [ - > + < ] + + >
 [ - < - > ] < <
 < ] < < < < ] + + + + + + + + +
 + . + + + . [ - ] < ] + + + + +
 * * * * * M a d y * B y : * N Y Y R I K K I * 2 0 0 2 
* * *

Referencies

Enllaces esternos

Wikiwand - on

Seamless Wikipedia browsing. On steroids.