2012-09-24 50 views
13

我搜索了一段时间,但我找不到任何可以帮助我的东西。在brainfuck中打印一个数字?

假设第一个单元格(或值等)等于165.我如何打印“165”?

我的想法是将数字分成单独的部分:1,6和5.打印它们不是问题。

注:我不只是想打印“165”。我想打印第一个单元格的值。不管它是165,255,0,1还是其他。

回答

12

使用著名模过程(http://esolangs.org/wiki/brainfuck_algorithms将帮助你)

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

+1的链接。但是这个功能只适用于3位数字。 –

+0

有[代码适用于同一页面上的所有单元格大小](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

我已经创建了一个简单的语言,编译为brainfuck,可以在这里找到:http://code.google.com/p/brainfuck-compiler。在java中实现的语言有一个编译器。

我在该语言中使用以下函数来输出一个数字。也许你可以分析生成的代码,看看是否有任何东西可以用于你。尽管有一个警告词,它确实会在单元格周围产生一些冗余的复制(从未尝试优化过)。无论如何,这里有一个示例程序和它生成的BF代码。 (注意,缺口必须是在我的语言标签)

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" 

这里是所生成的代码:

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

这只是可怕的慢... –