混淆代码:最后一位数字

时间:2015-10-08 17:23:12

标签: algorithm brainfuck

我有一个挑战是用brainfuck语言编写混淆代码来执行以下操作:

  

对于给定数字n输出其最后一位数。

     

输入

     

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

     

输出

     

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

     

例子我   输入:32   输出:2

     

示例II:   输入:231231132   输出:2

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

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

1 个答案:

答案 0 :(得分:3)

问题是当输入为0时,你告诉循环终止。

输入永远不会为0,换行符的ASCII为10,这就是您需要使用的内容。

此代码应该有效。实际上,如果你给它一个数字,这段代码根本就不在乎它只会在它找到的第一个换行符之前返回最后一个字符。

+[     // increment [1] by 1 and enter the loop
  ,[     // read input to [1] and enter another loop
     >+>+<<-     // copy the initial input twice whilst decrementing the original
  ]
  >>>++++++++++     // write 10 (for newline) and enter a loop
  [
    <->-     // decrement the 10 counter and one of the copied inputs
  ]
< step back to the (input - 10) cell
]<<<.     // if (input - 10 == 0) then you just read a carriage return! yay! Step back by three to the last stored input and print it out to the console.