写一个死鱼解释器
Sandbox,CodidactA用更简单的输入格式和准则重写这个问题。challengeheadfish使用一个累加器,所有命令都将在其上执行。它具有以下特性命令:commanddescriptio
解答动态
传送,90 76字节 {lt;^vlt;^vlt;'o'^quot;,*quot;=256.=quot;}。底部是-1/256的检查,通过计算a*=a!=256和a*=a!= -1. 然后累加器循环返回开始下一轮。
累加器的一次迭代回路:
JavaScript(ES10),66 bytes 需要一个代码点列表。
a=gt;n%5?p: (p=(p=[p-!!p、 p+1,,p*p][namp;p,[]),p=0) 在线试用!怎么做? o是唯一一个代码点(\$111\$)模5\$不等于0\$的命令。这也是唯一需要不更新累加器的特殊操作的命令。这就是为什么我们首先测试它。
如果第一个模是\$0\$,我们应用一个模\$4\$来区分其他命令,并相应地更新累加器。
char。代码
mod 5
mod 4------------------+----+----'d'
100
0
0'i'
105
0
1'o'
111
1
(3)'s'
115
0
3
flex,86\$\cdots\$83 82 bytes 节省了2个字节,并且由于Mukundan314被移动到了TIO中!!!
%{a;m(){a*=a!=256;}%}%%i m(++a);d m(aquot;%damp;--a);s m(a*=a);o printf(quot;,a);%% 这里我们有4个字符以及遇到每个字符时要运行的代码。只有当累加器不为零时,减量才会发生。
后面有一个程序段,但如果忽略它,它将默认为运行解析器的main(如本例中所示)。
您可以从上面生成C源代码lexer(在deadfish.l文件中)并用以下内容:
flex deadfish.lgcc雷克斯·yyc-o公司deadfish-lf 编译后,运行以下:
echo iissso./deadfishecho diissido
./deadfishecho iissiddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd输出:
028801 425 676 4583290 0 0 0 0 1 16 16 164112 您也可以将其作为./deadfish运行,并拥有一个交互式的deadfish环境来尽情地玩!
Ruby,60 58 bytes 由于@Sisyphus
a=0;$<;,节省了2个字节。字节{b
a=0if(a=eval'~-~pa*'[b%20/3,2]+?a) ^256<;1} 联机尝试或验证所有测试用例。
从STDIN读取字符串并输出到STDOUT的完整程序,每行一个数字。
累加器a上的每个操作都是通过计算一个3字节的字符串来执行的。第三个字节始终是a。前两个字节从索引b%20/3处开始的字符串~-~p a*中提取:
Op\$b\$\$\left\lfloor\frac{b\bmod20}{3}\right\rfloor\$evald\$100\$\$0\$~-ai\$105\$\$1\$-~ao\$111\$3\$p为\$115\$\$5\$a*aNim,104 bytes var r=0表示c in标准读取:r=[r*r,r,r+1,r-1][28-c.ord div 4];r*=int(r xor 256)>;0;如果c=='o':echo r 在线测试!
基于@ovs惊人的Python answer.
Nim,120 114 109 bytes var r=0for c in标准读取:案例c of'i':r+=1 of'd':r-=1 of's':r*=relse:r.echo如果r in[-1256]:r=0 联机试用!
这是令人尴尬的可读性。
-5字节的灵感来自@Gotoro的Python answer
Python 3,120 95 bytes n=0forx in input():#9;if“o”==x:print(n) ;其他:n=[n+1,n-1,n*n][ord(x)%4^1] 联机试用!多亏了丹尼斯的建议,
把它减少了25个字节!
使用位操作^我们从可能的操作。原始建议使用ord(x)%4^2,它产生0,1,2,3作为索引,并要求在索引0处的列表中使用额外的0;
使用^1产生0,1,2,这允许在比较中节省2字节。
也许可以说明额外的0并将其作为打印o的条件
Python 2,83 82 76 74 bytes 感谢dingledooper发现了一个bug和-6个字节!-感谢穆昆丹!
将输入作为代码点列表。
a=0表示input()中的x:a=[a-1,a+1,a,a*a][x/6%4];a*=a^256>;0如果x%5:打印a Try it online!
05AB1E,23 22字节 -1字节,感谢命令主控!
将输入作为码点列表。
???vgt;nquot;yè.VD?xAE;P* 在线试用!或者试试所有的案子!
页注释:
?? #打印不带尾随换行符的空字符串#如果代码?#push 0中没有'o',并且输入v#迭代输入中的指令y:gt;nquot;#push string literalgt;nquot;#这些是05AB1E中的指令,相当于“isdo”y#推送当前指令;#将指令的模化索引减半到指令字符串中。V#执行指令D#复制当前值?#按256键,按-1键,将它们配对到[256,-1]ê#是否每个元素都不等于当前值?P#取乘积,如果当前值不在{1256}*.#将结果乘以当前值 a transpiler from Deadfish to 05AB1E为20字节,但这仍然需要.V?和初始值0:
0gt;nquot;I;?quot;V? 联机试用!
AWK,83字节 {对于(d=0;c=$++b%9;)printf c-3?(d=(x=c-6?c-1?d*d:--d:++d)quot;\nquot;0quot;\nquot;truthy";部分中的逻辑更新累加器,但总是返回一个值f。由于这是一个未初始化的变量,AWK根据使用它的内容选择一个值。在这种情况下,它会变成一个空字符串,因此printf不会为非o命令生成任何输出。
更新累加器的代码被绑定到print语句中,因此只为a、d、i和s命令调用它。因此,它不必检查o.
在线尝试!
AWK,55 53 52 51 bytes 感谢用户41805删除AWK标志
期望每个操作都在单独的行
{a*=a!=256}/i/{a++}/d/{aamp;a--}#如果行包含'd',且a为非零,则将a减少1/s/{a*=a}#如果行包含's'平方a/o/{print+a}#如果行包含'o'输出aPowerShell,68字节 switch-r($args){i{$a++}d{$a--}s{$a*=$a}o{+$a}.{$a*=$a-notin-1256}} 在线试用!
x86-16机器代码,45字节 源代码与x86和x86
64兼容。将386条指令与提供的polyfill一起使用。
由于整数溢出而使一次测试失败,但演示中给出了将其切换为64位算术的指令。
00000000:31 d2 ac 3c 64 72 25 74 0d 3c 69 74 0c 3c 6f 74 1..lt;it.<;ot00000010:0b 0f af d2 eb 09 4a eb 06 42 eb 03 89 d0 ab 83……J..B……00000020:fa ff 74 dc 81fa 00 01 74 d6 eb d6 c3..t..t.. //quot;//quot;注释仅用于突出显示语法//sed-i-e的#//####g'死鱼.asm//nasm兼容[bits 16][cpu 386]//对于imul dx,dx global deadfish//Input://si:Input,以null结尾的字符串//di:output,uint16\u t数组//output:///di:points超过数组中的最后一个值伊德鱼:.Lzero://将累加器设置为0 xor dx,dx.Lloop文件用法:/Load byte lodsb//检查空终止符和'd'cmp al,'d'//下面的意思空终止符,返回jb.Lret//等于'd'je.Lop\u d//检查'i'cmp al,'i'je.Lop\u i//检查'o'cmp al,'o'je.Lop\u o//假定's'。Lop\u s://Square//8086兼容版本://xchg ax,dx//mul ax//xchg dx,ax imul dx,dx jmp。下一个Lop\u d://递减dec dx jmp。下一页://增量inc dx jmp。下一页Lop\u o://输出//将dx移动到ax mov ax,dx//*di++=axstosw.下一步://检查-1和256//如果相等,跳转到xor dx,dx方便地放在循环cmp dx,-1之前- End
免责声明:
本页内容仅代表作者本人意见,若因此产生任何纠纷由作者本人负责,概与琴岛网公司无关。本页内容仅供参考,请您根据自身实际情况谨慎操作。尤其涉及您或第三方利益等事项,请咨询专业人士处理。