在Brainfuck中打印一个数字?

19

我已经搜索了一段时间,但是没有找到任何可以帮助我的东西。

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

我的想法是将数字分割成单独的部分:1、6和5。然后就可以轻松地将它们打印出来。

注意:我不只是想打印“165”。我想打印第一个单元格的值。无论它是165、255、0、1还是其他任何值。

2个回答

16

使用著名的模数运算过程(http://esolangs.org/wiki/brainfuck_algorithms 将帮助您)

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

但此函数仅适用于三位数。+1 以示链接赞赏。 - Thierry J.

15

我创建了一种简单的语言,它可以编译成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"

下面是生成的代码:

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

你曾经将项目迁移到GitHub上吗? - 000000000000000000000
1
不是真的。早已被抛弃了。我曾经和我的一个朋友打赌,要用brainfuck编写一个游戏。我制作了这个编译器,写了游戏,赢得了赌注,然后就放弃了它。 - Cedric Mamo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接