有时,在编写brainfuck代码时,您会感觉到需要使它比需要的时间更长,以鼓励调试。你只需在里面放一个><就可以做到,但这有什么意思呢?您将需要更长、更少的NOPey来迷惑阅读代码的人。
布莱福克是城市米勒于1993年创建的一种深奥的编程语言,以其极端的极简主义著称。(维基百科)
Brainfuck是一种基于八个命令的语言:+-><,.[]。代码运行在类似图灵机的东西上:一种可以改变值的无限磁带。在这个挑战中,我们将集中讨论前四项:
+ increment the value at the pointer
- decrement the value at the pointer
> move the pointer right
< move the pointer leftbrainfuck 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
复制相似问题