Lo primero que uno aprende cuando está aprendiendo un lenguaje nuevo de programación es a escribir «Hola mundo». Es uno de los tópicos más extendidos en el mundillo y ya se ha convertido en una tradición que hace que más de uno se sienta incómodo si no aprende así.
Por ejemplo, en C++, uno de los lenguajes que usamos en el Curso Online de Programación de Videojuegos con C++, hola mundo se escribiría así:
cout << «Hola mundo << endl;
Sencillo, ¿verdad? Pues bien, en 1993, un señor suizo llamado Urban Müller le dio por crear un nuevo lenguaje de programación al que tituló «brainfuck» (en español, jodida cerebral). Su objetivo es que fuera un lenguaje simple, basado en la máquina de Turing, y que requiriese de un compilador muy sencillo.
Hasta aquí todo normal. ¿Por qué ese nombre entonces? Pues bien, veamos como se escribe hola mundo en brainfuck:
++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.——.——–.>+.>.
Sencillo, ¿verdad? Bueno, en realidad lo es. Solo hay 8 instrucciones posibles y solo tienen un carácter: > y < que aumentan y decrementan el puntero, + y – que aumentan y decrementan el byte apuntado, . que escribe el byte, , que lee un byte, y [ ] que avanzan o retroceden instrucciones. Si te fijas, en la línea del hello world tienes 11 puntos: uno para cada letra y el espacio. Es más, si te fijas, hay dos puntos juntos: las dos l de hello. De hecho, es algo así:
++++++++++[ Bucle para iniciar las memorias (se repite 10 veces)
>+++++++>++++++++++>+++++++++++>+++>+<<<<<-
70 100 110 30 10
]>++. imprime ‘H’ (72) 1
>>+. imprime ‘o’ (111) 3
—. ‘l’ (108) 3
<—. ‘a’ (97) 2
>>++. espacio (32) 4
<+. ‘m’ (109) 3
++++++++. ‘u’ (117) 3
——-. ‘n’ (110) 3
<+++. ‘d’ (100) 2
>+. ‘o’ (111) 3
>+. ‘!’ (33) 4
>. ‘n’ (10) 5
Bueno, algo de diferencia con el C++ hay. ¿Más ejemplos de código en brainfuck? Un generador de números aleatorios:
>>>++[ <++++++++[ <[<++>-]>>[>>]+>>+[ -[->>+<<<[<[<<]<+>]>[>[>>]]] <[>>[-]]>[>[-<<]>[<+<]]+<< ]<[>+<-]>>- ]<.[-]>> ]
O el famoso algoritmo de la burbuja, que nuestros alumnos del curso de Unreal u Ogre conocen bien:
>>,[>>,]<<[ [<<]>>>>[ <<[>+<<+>-] >>[>+<<<<[->]>[<]>>-] <<<[[-]>>[>+<-]>>[<<<+>>>-]] >>[[<+>-]>>]< ]<<[>>+<<-]<< ]>>>>[.>>]
Y tú qué, ¿te atreves con brainfuck?