2012-09-24 6 views
13

Ho cercato per un po ', ma non sono riuscito a trovare nulla che potesse aiutarmi.Stampa un numero in brainfuck?

Diciamo che la prima cella (o valore, ecc.) È uguale a 165. Come si stampa "165"?

La mia idea era di tagliare il numero in pezzi separati: 1,6 e 5. Non sarebbe stato un problema stamparli.

Nota: non voglio solo stampare "165". Voglio stampare il valore della prima cella. Non importa se è 165, 255, 0, 1 o qualsiasi altra cosa.

risposta

12

uso un famoso procedura di modulo (http://esolangs.org/wiki/brainfuck_algorithms vi aiuterà a)

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

+1 per il collegamento. Ma questa funzione funziona solo con numeri di 3 cifre. –

+0

C'è [il codice che funziona per tutte le dimensioni delle celle sulla stessa pagina] (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

Ho creato un linguaggio semplice che compila per Brainfuck che può essere trovato qui: http://code.google.com/p/brainfuck-compiler. C'è un compilatore per la lingua implementata in java.

Io uso la seguente funzione in quella lingua per emettere un numero. Forse puoi analizzare il codice generato e vedere se qualcosa ti può essere utile. Una parola di avvertimento, però, genera un po 'di copia ridondante di celle (non è mai riuscito a ottimizzarlo). Comunque ecco un programma di esempio e il codice BF che genera. (Si noti che rientranze DEVE essere schede nella mia lingua)

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" 

Ed ecco il codice generato per questo:

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

Questo è semplicemente terribilmente lento ... –