2012-09-24 8 views
13

Ich habe eine Weile gesucht, aber ich konnte nichts finden, was mir helfen könnte.Drucken einer Nummer in brainfuck?

Nehmen wir an, die erste Zelle (oder Wert usw.) ist gleich 165. Wie drucke ich "165"?

Meine Idee war, die Nummer in einzelne Stücke zu schneiden: 1,6 und 5. Es wäre dann kein Problem, sie zu drucken.

Hinweis: Ich möchte nicht nur "165" drucken. Ich möchte den Wert der ersten Zelle drucken. Egal ob es 165, 255, 0, 1 oder irgendetwas anderes ist.

Antwort

12

Verwendung ein berühmtes Modulo-Verfahren (http://esolangs.org/wiki/brainfuck_algorithms werden Ihnen helfen)

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

+1 für den Link. Aber diese Funktion funktioniert nur für 3-stellige Nummern. –

+0

Es gibt [Code, der für alle Zellengrößen auf derselben Seite funktioniert] (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

Ich habe eine einfache Sprache erstellt, die zu brainfuck kompiliert, die hier gefunden werden kann: http://code.google.com/p/brainfuck-compiler. Es gibt einen Compiler für die in Java implementierte Sprache.

Ich verwende die folgende Funktion in dieser Sprache, um eine Zahl auszugeben. Vielleicht können Sie den generierten Code analysieren und sehen, ob Ihnen irgendetwas von Nutzen sein kann. Ein Wort der Warnung aber, es erzeugt ein wenig redundantes Kopieren von Zellen herum (nie darum herumgekommen, dies zu optimieren). Wie auch immer, hier ist ein Beispielprogramm und der BF-Code, den es generiert. (Beachten Sie, dass Vertiefungen Tabs in meiner Sprache sein muss)

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" 

Und hier ist der generierte Code dafür:

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

Dies ist nur erschreckend langsam ... –