Brainfuck挑战

时间:2015-06-25 11:58:35

标签: brainfuck

我有任何挑战。我必须写脑筋法。

对于给定的数字,n指定其最后一位数。

入口

输入将只包含一行,其中只有一个整数n(1 <= n <= 2,000,000,000),后跟换行符'\ n'(ASCII 10)。

出口

在输出上必须找到一个表示n的最后一位的整数。

例子我 入口:32 退出:2

示例II: 入口:231231132 退出:2

这是我尝试过的,但它不起作用:

+[>,]<.>++++++++++.

4 个答案:

答案 0 :(得分:2)

最后一个输入是换行符。因此,您必须返回两个记忆位置才能获得该数字的最后一位数字。也许你不必返回换行符,所以代码是

,[>,]<<.

答案 1 :(得分:2)

对不起,真正的答案是

,[>,]<.

因为你的答案太过分了;)

答案 2 :(得分:1)

根据解释器的不同,您可能需要自行转义返回键。考虑到返回键是ASCII: 10,您的代码应如下所示:

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

细分:

>               | //first operation (just in case your interpreter does not
                    support a negative pointer index)
,----- -----    | //first entry if it's a return; you don't even get in the loop
[                
    +++++ +++++ | //if the value was not ASCII 10; you want the original value back
    >,          | //every next entry
    ----- ----- | //check again for the the return, 
                    you exit the loop only if the last entered value is 10
]
<.              | //your current pointer is 0; you go back to the last valid entry
                    and you display it

答案 3 :(得分:1)

您的问题是,循环将永远持续下去,直到循环结束时指针当前所在的单元格等于0。您的代码永远不会在循环中打印,也不会减法,因此您的循环永远不会结束,而您的代码所做的就是将一个ASCII字符作为输入,向前移动一个,将一个ASCII字符作为输入,依此类推。循环结束后的所有代码都是无用的,因为循环永远不会结束。