挑战是为了庆祝我的第一种深奥的语言,反手!
反手是具有非线性指针流的一维语言。指针一次移动三步,仅每第三条指令执行一次。
程序1..1..+..O..@
将在终止前加1 + 1,并输出2。中间指令被跳过,因此1<>1()+{}O[]@
完全相同的程序。
当指针将要离开磁带末端时,它会反转方向并以另一种方式前进,因此1.@1.O+.
同一程序也是如此。注意,它仅对结束指令计数一次。这使我们可以压缩大多数线性程序,例如1O+1@
您面临的挑战是编写一个带有字符串的程序或函数,并输出如果程序像反手一样被解释时将执行的指令(您不需要处理任何实际的反手指令)。您将只输出直到指针到达字符串的最后一个字符为止(此时执行通常会向后执行)。
但是,等等,还不是全部!当您的程序本身以这种方式解释时,结果代码应输出以下内容之一:
(Mostly) works
Turing complete
'Recreational'
(引号可以是'
或"
,但不能同时是两个)Perfectly okay
Only a few bugs
例如,如果您的源代码是code 2 backhand
,则程序ce cankb od2ahd
应输出这些短语之一。
测试用例:
"1 1 + O @" -> "11+O@"
"1O+1@" -> "11+O@"
"HoreWll dlo!" -> "Hello World!"
"abcdefghijklmnopqrstuvwxyz" -> "adgjmpsvyxurolifcbehknqtwz"
"0123456789" -> "0369" (not "0369630369")
"@" -> "@"
"io" -> "io" (Cat program in Backhand)
"!?O" -> "!?O" (Outputs random bits forever in Backhand)
"---!---!" -> "-!-----!"
当然还有一个用Backhand编写的参考程序(这可能有点问题,好吧,我想我已经解决了)。
规则。
"---!---!"
或任何最后一个字符出现多次的字符串)