我只是当场创造了一种语言,叫做“解释器”。因为唯一有效的单词是“解释器”!“解释器”中的示例程序如下所示:
interpreter interpreterinterpreter interpreterinterpreterinterpreter interpreterinterpreterinterpreterinterpreter interpreterinterpreterinterpreterinterpreterinterpreter interpreterinterpreterinterpreterinterpreterinterpreterinterpreter它看起来可能毫无意义,但语言的工作原理如下:
interpreter将累加器初始化为零。interpreterinterpreter向累加器添加一个。interpreterinterpreterinterpreter从累加器中减去一个。interpreterinterpreterinterpreterinterpreter将累加器乘以2。interpreterinterpreterinterpreterinterpreterinterpreter将累加器除以2。interpreterinterpreterinterpreterinterpreterinterpreterinterpreter输出累加器。interpreter。interpreter interpreterinterpreter interpreterinterpreterinterpreterinterpreterinterpreterinterpreter -> 1
interpreter interpreterinterpreter interpreterinterpreter interpreterinterpreterinterpreterinterpreter interpreterinterpreterinterpreter interpreterinterpreterinterpreterinterpreterinterpreterinterpreter -> 3
interpreter interpreterinterpreterinterpreterinterpreterinterpreter interpreterinterpreter interpreterinterpreterinterpreterinterpreterinterpreterinterpreter -> 1
interpreter interpreterinterpreter interpreterinterpreter interpreterinterpreterinterpreterinterpreterinterpreterinterpreter interpreterinterpreterinterpreter interpreterinterpreterinterpreterinterpreterinterpreterinterpreter interpreter interpreterinterpreter interpreterinterpreterinterpreterinterpreterinterpreterinterpreter -> outputs 2, then outputs 1, then outputs 1发布于 2021-02-26 09:58:50
s=>s.split` `.map(i=>(n=i.length%6)?s=[,s/2,s*2,s-1,s+1,0][n]:print(s))解释器指令的长度是11\times k,\:1\le k \le 6,它给出了[11,22,33,44,55,66]。当应用模块化6时,这将映射到[5,4,3,2,1,0]。这比用11除法要短,并且允许我们很容易地识别输出指令(大小66,映射到0),它的行为与其他指令不同。
此版本还基于指令模块6的长度,但不使用任何查找表。它用一条语句更新累加器,使用算术和按位操作。
这在JS中是毫无意义的,但在是否用C保存了几个字节 (与三值操作符链相反)。
s=>s.split` `.map(i=>(n=i.length%6)?A=A*(6&9/n|n<2)/2+(3>>n-3^2)-2:print(A),A=0) | n = | multiply by: | add:
operation | length % 6 | (6&9/n|n<2)/2 | (3>>n-3^2)-2
-----------+------------+---------------+--------------
clear | 5 | 0 | 0
increment | 4 | 1 | 1
decrement | 3 | 1 | -1
double | 2 | 2 | 0
halve | 1 | 0.5 | 0发布于 2021-05-12 00:23:34
rDO,13字节⌈vL`…½d‹›0`İĖ在网上试试!
@凯恩斯共同继承应答的05AB1E答案的Vyxal端口。
解释:
# Implicit input
⌈ # Split on " "
vL # Length of each command
`…½d‹›0` # Push "…½d‹›0" 'D' flag - treat as raw string
İ # Index into string
Ė # Exec as Vyxal code
# 'O' flag - disable implicit output
The commands in `…½d‹›0`:
… - Print without popping
½ - Halve
d - Double
‹ - Decrement
› - Increment
0 - Push 0https://codegolf.stackexchange.com/questions/219810
复制相似问题