您必须为一种叫做鸡肉的很酷的语言编写一个解释器!
您应该从文件、标准输入、程序或函数参数或任何对您的语言最方便的内容以及对程序的输入中读取小鸡程序。
你应该打印或返回根据鸡语言规范解释程序的结果。
小鸡在一个堆栈上运行,这就构成了它的整个内存模型。在执行指令时,程序将从堆栈中推送和弹出值,但也有指令允许程序随意修改堆栈的其他部分。
堆栈中有三个段:
鸡
小鸡的指令集是基于“小鸡”这个词出现在程序的每一行上的次数。空行终止程序并打印堆栈中的最顶层值。
鸡指令集,按“鸡”S数每一行:
假设程序是:
chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken chicken chicken chicken
(an empty line)( cat程序)注意,空行是必需的,因为前面的一行有6“鸡肉”)。
为鸡项目提供的投入
Chicken输出
ChickenChicken.js参考实现。
解释器应该留下一个错误,并在源中出现任何单词而不是“鸡肉”时终止。
祝好运!
发布于 2016-06-23 15:37:44
到目前为止,这是我所做过的最长的高尔夫球,我相信这是可以改进的,但是我的大脑在这一点上除了chicken什么都认不出来。
(a,b)=>{for(c='chicken',s=[j=0,b,...A=a.split`
`.map(m=>m.split(c).length-1)],i=A.length+2;j<A.length;([_=>s[++i]=c,_=>s[--i]=s[i]+s[i+1],_=>s[--i]=s[i]-s[i+1],_=>s[--i]=s[i]*s[i+1],_=>s[--i]=s[i]==s[i+1],_=>s[i]=s[2+j++]?b[s[i]]:s[s[i]],_=>s[s[i--]]=s[i--],_=>j+=s[--i]?s[--i+2]:0,_=>s[i]=String.fromCharCode(s[i])][s[j+2]-1]||(_=>s[++i]=s[j+1]-10))(j++));return /[^chicken \n]\w/g.test(a)?0:s[i]}当我的大脑重新开始运作时,我会编辑解释。这是一个暂时不太流行的版本。
输出不属于chicken的所有事物的falsey值(0)
(a,b)=>{
for(c='chicken',s=[j=0,b,...A=a.split`
`.map(m=>m.split(c).length-1)],i=A.length+2; // loop init
j<A.length; // loop condition
( // everything else
[
_=>s[++i]=c,
_=>s[--i]=s[i]+s[i+1],
_=>s[--i]=s[i]-s[i+1],
_=>s[--i]=s[i]*s[i+1],
_=>s[--i]=s[i]==s[i+1],
_=>s[i]=s[2+j++]?b[s[i]]:s[s[i]],
_=>s[s[i--]]=s[i--],
_=>j+=s[--i]?s[--i+2]:0,
_=>s[i]=String.fromCharCode(s[i])
][s[j+2]-1]
||(_=>s[++i]=s[j+1]-10)
)(j++)
);
return /[^chicken \n]\w/g.test(a)?0:s[i]}在这里试试
f=
(a,b)=>{for(c='chicken',s=[j=0,b,...A=a.split`
`.map(m=>m.split(c).length-1)],i=A.length+2;j<A.length;([_=>s[++i]=c,_=>s[--i]=s[i]+s[i+1],_=>s[--i]=s[i]-s[i+1],_=>s[--i]=s[i]*s[i+1],_=>s[--i]=s[i]==s[i+1],_=>s[i]=s[2+j++]?b[s[i]]:s[s[i]],_=>s[s[i--]]=s[i--],_=>j+=s[--i]?s[--i+2]:0,_=>s[i]=String.fromCharCode(s[i])][s[j+2]-1]||(_=>s[++i]=s[j+1]-10))(j++));return /[^chicken \n]\w/g.test(a)?0:s[i]}
i.innerHTML = f(`chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken chicken chicken chicken
`, 'Hello world!')<pre id=i>https://codegolf.stackexchange.com/questions/83567
复制相似问题