Brain Fuck, jugando un poco con lenguajes esotéricos

danigm's picture

Además de los lenguajes de programación normales y corrientes existen lenguajes de programación esotéricos creados para "divertirse" o de manera meramente educativa/científica, no con una orientación funcional.

Un lenguaje esotérico muy conocido es el brain fuck, cuyas primitivas son "><+-[]. y ,". Estos son todos los simbolos de los que dispone el lenguaje y con los que hay que escribir el programa.

No voy a explicar qué hace cada simbolo ni cómo, para eso está la wikipedia o la página oficial. Incluso hay tutoriales sobre brainfuck para aprender a programar las primitivas básicas de un lenguaje de programación con estos simbolos.

La cosa es que me ha dado por ahí y ayer me puse a programar algo. La idea era hacer un programita que pidiera dos números por teclado, y luego los sumara. Nada complicado.

El mayor problema con el que me he encontrado es a la hora de representar el resultado por pantalla cuando el número era mayor de 10, puesto que con brainfuck tienes que sacar por pantalla caracter a caracter.

Por supuesto este programa no suma números de más de dos dígitos, dado que la entrada se hace cáracter a carácter y parsear un 12 por ejemplo implicaría una complejidad inimaginable (quizás no tanto, pero eso requeriría unas cuantas horas más).

Aquí está el código:

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

¿Por qué brainfuck? ¿Estás loco o qué? No se, es divertido tratar de encontrar soluciones a problemas y si tienes que utilizar un lenguaje como este el reto es mucho mayor. Nunca viene mal ejercitar un poquiito las neuronas y recordar cosas de computación básica. Al fin y al cabo el universo podría reducirse a estos simbolos, eso sí, habría que escribir un montón.

Comments

2
cousteau's picture

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

y viva brainfuck

PD, hace tiempo hice un intérprete de brainfuck en el potentísimo lenguaje JavaScript, ¿te lo paso?
...bueno, como seguro que contestas que sí, y luego se me va a olvidar... http://pastebin.com/tNFPgyTE (a ver si el bot no me banea)

danigm's picture

Genial! brain fuck mola