2012-09-24 8 views
13

He buscado por un tiempo, pero no he podido encontrar nada que pueda ayudarme.Imprimir un número en brainfuck?

Digamos que la primera celda (o valor, etc.) es igual a 165. ¿Cómo imprimo "165"?

Mi idea era cortar el número en piezas separadas: 1,6 y 5. Sería un problema imprimirlas.

Nota: No solo quiero imprimir "165". Quiero imprimir el valor que tiene la primera celda. No importa si es 165, 255, 0, 1 o cualquier otra cosa.

Respuesta

12

uso de un procedimiento de módulo famosa (http://esolangs.org/wiki/brainfuck_algorithms le ayudará a)

>+++++++++++[-<+++++++++++++++>] # initialize 165 at first cell 
>++++++++++<<[->+>-[>+>>]>[+[-<+>]>+>>]<<<<<<]>>[-]>>>++++++++++<[->-[>+>>]>[+[- 
<+>]>+>>]<<<<<]>[-]>>[>++++++[-<++++++++>]<.<<+>+>[-]]<[<[->-<]++++++[->++++++++ 
<]>.[-]]<<++++++[-<++++++++>]<.[-]<<[-<+>] 
+0

+1 para el enlace. Pero esta función solo funciona para números de 3 dígitos. –

+0

Hay [código que funciona para todos los tamaños de celda en la misma página] (http://esolangs.org/wiki/brainfuck_algorithms#Print_value_of_cell_x_as_number_for_ANY_sized_cell_.28ie_8bit.2C_16bit.2C_etc.29). – amoebe

7

He creado un lenguaje simple que compila a brainfuck que se puede encontrar aquí: http://code.google.com/p/brainfuck-compiler. Hay un compilador para el lenguaje implementado en java.

Utilizo la siguiente función en ese idioma para dar salida a un número. Tal vez puedas analizar el código generado y ver si algo puede ser útil para ti a partir de él. Sin embargo, una palabra de advertencia genera un poco de copia redundante alrededor de las celdas (nunca se pudo optimizar esto). De todos modos aquí hay un programa de ejemplo y el código BF que genera. (Tenga en cuenta que las muescas DEBEN ser pestañas en mi idioma)

declare n, 165 
declare digits 
while n 
    push n % 10 
    digits = digits + 1 
    n = n/10 
if digits 
    while digits 
     out pop + 48 
     digits = digits - 1 
else 
    outs "0" 

y aquí está el código generado para que:

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

Esto es terriblemente lento ... –

Cuestiones relacionadas