有时,在编写brainfuck代码时,您会感觉到需要使它比需要的时间更长,以鼓励调试。你只需在里面放一个><
就可以做到,但这有什么意思呢?您将需要更长、更少的NOPey来迷惑阅读代码的人。
布莱福克是城市米勒于1993年创建的一种深奥的编程语言,以其极端的极简主义著称。(维基百科)
Brainfuck是一种基于八个命令的语言:+-><,.[]
。代码运行在类似图灵机的东西上:一种可以改变值的无限磁带。在这个挑战中,我们将集中讨论前四项:
+ increment the value at the pointer
- decrement the value at the pointer
> move the pointer right
< move the pointer left
brainfuck NOP是从任何状态执行的一系列brainfuck字符,它不会导致状态的变化。它们由上面提到的四个字符组成。
挑战
挑战是编写一个程序或函数,当执行时,生成给定长度的随机brainfuck NOP。
您将收到一个非负的偶数整数n
作为输入。(对于奇数n
来说,NOPs是不可能的。)
您将输出长度为n
的随机brainfuck NOP。
+>-<
是不正确的,因为它更改两个单元格的值而不更改它们。请在发帖前测试您的解决方案。+>-<->+<
是一个NOP,不能仅通过删除><
<>
+-
-+
就可以减少到零。因此,您不能使用只将这些内容插入到彼此内部的算法。n
的每个有效NOP必须有一个非零的机会出现在输出中。不过,分布并不一定是统一的。n
= 100的程序必须在1分钟内完成,因此不能生成所有可能的NOPs并选择一个。这是密码-高尔夫,所以以字节为单位的最短答案获胜。
以下是n
=4的所有有效输出:
++-- +-+- +--+ --++ -+-+ -++-
>><< ><>< ><<> <<>> <><> <>><
><+- ><-+ <>+- <>-+
>+-< >-+< <+-> <-+>
+><- -><+ +<>- -<>+
+->< -+>< +-<> -+<>
下面是n
=20的几个可能的输出:
+>>->+<->-<<<->>++<<
>+>-<+<->+-<>->+<-<+
+--+-++--++-+--+-++-
>>>>>>>>>+-<<<<<<<<<
发布于 2015-12-07 13:20:16
Quiet@(For[a="+",If[{##4}=={},#3!=0||Union@#!={0},Switch[#4,"+",#0[ReplacePart[#,#2->#[[#2]]+1],#2,#3,##5],"-",#0[ReplacePart[#,#2->#[[#2]]-1],#2,#3,##5],">",#0[#~Append~0,#2+1,#3+1,##5],"<",If[#2<2,#0[#~Prepend~0,1,#3-1,##5],#0[#,#2-1,#3-1,##5]]]]&@@{{0},1,0}~Join~Characters@a,a=""<>RandomSample@Flatten@RandomChoice[{{"+","-"},{">","<"}},#/2]];a)&
太久了?是。我还在乎吗?除非别人发了一个有效的答案。
发布于 2018-10-24 06:56:30
https://codegolf.stackexchange.com/questions/65925
复制相似问题