有时,在编写脑力激荡的代码时,您会感到需要使其长度超过鼓励调试的时间。您可以通过><
在其中放一个来做到这一点,但是那有什么乐趣呢?您将需要更长或更短的NOPey,以使任何人都无法阅读您的代码。
快速入门Brainfuck
Brainfuck是UrbanMüller于1993年创建的一种深奥的编程语言,以其极简主义而著称。(维基百科)
Brainfuck是一种基于八种命令的语言:+-><,.[]
。该代码在图灵机之类的东西上运行:可以在上面更改值的无限磁带。在此挑战中,我们将重点关注前四个:
+ increment the value at the pointer
- decrement the value at the pointer
> move the pointer right
< move the pointer left
脑干NOP
脑干NOP是一系列脑干角色,当从任何状态执行时,脑筋都不会改变状态。它们由上述四个字符组成。
挑战
面临的挑战是编写一个程序或函数,当执行该程序或函数时,将生成给定长度的随机性NOP。
输入项
您将收到一个非负偶数整数作为输入n
。(NOP不可能是奇数n
。)
输出量
您将输出一个长度为的随机性NOP n
。
规则
- NOP的定义:在将程序的输出插入到Brainfuck程序的任何位置时,该程序的行为不得以任何方式改变。换句话说,它不得更改解释器的状态。
- 请注意,例如
+>-<
,这是不正确的,因为它更改了两个单元格的值而没有将它们改回来。发布前,请先测试您的解决方案。 - 另请注意,这
+>-<->+<
是一个NOP,仅通过删除就不能将其减少为零><
<>
+-
-+
。因此,您不能使用仅将它们彼此插入的算法。
- 请注意,例如
- 长度的每个有效NOP
n
必须有非零的机会出现在输出中。但是,分布不必一定是统一的。 - 讨论中的“脑干”解释器具有无限精确的任意精确细胞带。也就是说,您可以无限地向两个方向移动,并无限地增加/减少每个单元格。
- 该程序必须在1分钟内在
n
我的计算机上完成= 100,因此不能生成所有可能的NOP并选择一个。 - 如果输入的内容无效(非整数,负数,奇数等),则可以执行任何您想做的事情,包括崩溃。
计分
这是代码高尔夫球,因此最短的答案以字节为单位。
例子
这是n
= 4的所有有效输出:
++-- +-+- +--+ --++ -+-+ -++-
>><< ><>< ><<> <<>> <><> <>><
><+- ><-+ <>+- <>-+
>+-< >-+< <+-> <-+>
+><- -><+ +<>- -<>+
+->< -+>< +-<> -+<>
以下是n
= 20 的一些可能的输出:
+>>->+<->-<<<->>++<<
>+>-<+<->+-<>->+<-<+
+--+-++--++-+--+-++-
>>>>>>>>>+-<<<<<<<<<
.
具有副作用,,
覆盖不使用不能恢复的值[]
。但是[]
最终将值设置为零。[]
除非我们可以确定受影响的单元格从零开始,否则这也会覆盖一个值(因此我们需要另一个值来恢复它)。但是,我们必须使用来搜索类似的单元格[>]
,并且不可能可靠地返回到我们所在的位置。
+-<>
您的要求使用的操脑NOP :a