pbrain,402个 356 340 338 329字节
[(:<>)+,-.](>>>>>>)+([-]<<[->+>+<<]>>[-<<+>>]>>[-<+<+>>]<[->+<]<[-<->]<)+([-]+++++++[>+++++++++++++<-]>)+([-]+++++[>++++++++<-]>)+(-:<+++[->++++++<]>)+(-:++)+(-:++)+(----:+)+(-:++)+(-:+)+(-:+)+(-:+)+([-]++:++)+([>[->+>+<<]>>[-<<+>>]<:>>+:[[-]>+<]>-[<<<<[-.>]>>>>>>+>>>>>]<<[-]<<+<-]>>>)[-]>>>>>>>,[<<<<<<++<+++++++++++++:>>>>>>,]
Phew,@ KritixiLithos和我已经为此工作了4天。
0x00
如果输入的char不在程序中,则打印,否则以16进制表示char(从1开始)的索引。在线尝试!
说明:
[(:<>)+,-.]
All chars listed here; like other submissions
(>>>>>>)
@KritixiLithos added this part; I don't know what it does but saves the program
+([-]<<[->+>+<<]>>[-<<+>>]>>[-<+<+>>]<[->+<]<[-<->]<)
Comparison ;calculates z=x!=y and puts it in between x and y
Start; X _ _ _ Y
^
End; X Z _ _ Y
^
+([-]+++++++[>+++++++++++++<-]>)
Function to add 91 to the tape
+([-]+++++[>++++++++<-]>)
Function to add 40 to the tape
+(-:<+++[->++++++<]>)
Function to add 58 to the tape
+(-:++)
Function to add 60 to the tape
+(-:++)
Function to add 62 to the tape
+(----:+)
Function to add 41 to the tape
+(-:++)
Function to add 43 to the tape
+(-:+)
Function to add 44 to the tape
+(-:+)
Function to add 45 to the tape
+(-:+)
Function to add 46 to the tape
+([-]++:++)
Function to add 93 to the tape
+([>[->+>+<<]>>[-<<+>>]<:>>+:[[-]>+<]>-[<<<<[-.>]>>>>>>+>>>>>]<<[-]<<+<-]>>>)
最后一个功能是循环。它[(:<>)+,-.]
按顺序循环遍历所选字符,并将输入内容与字符进行比较。现在,我将对此循环的工作方式进行更深入的说明。
12-n n+2 _ n+2: _ _ _ i _ _ _ _ _ _; n=loop counter
^ ; i=input
堆栈在循环中看起来像这样。该循环将持续到12-n
IS 0
。然后我们有一个柜台n+2
。该计数器也是每个所选字符的功能编号。因此,当时n=0
,n+2
将对应第一个字符,即[
。>[->+>+<<]>>[-<<+>>]<:
这样做,它将计数器转换为字符。
一旦指针位于插入标记的位置,我们将比较计数器变量产生的字符与输入,同时保留它们。
12-n n+2 _ n+2: Z _ _ i _ _ _ _ _ _; n=loop counter
^ ; i=input
Z
是0
字符等于输入时的值,否则为其他非零整数。
现在,我们提出一个if语句来检查此相等性。
[[-]>+<]
如果Z
非零,即字符和输入不相同,我们将增加下一个存储位置。
从这个if语句出来后,我们递减下一个存储位置。现在该存储位置包含!Z
。最后使用它,如果与输入匹配,则输出字符的索引,然后强行退出循环。否则,我们继续循环,直到循环结束或找到匹配项为止。
[-]>>>>>>>
Clears first byte; goes to position to start program
,[<<<<<<++<+++++++++++++:>>>>>>,]
Loops inputs