编写一个只包含字符.和:的奇数长度字符串的程序。在初始空堆栈的帮助下,从该字符串生成一个数字,如下所示:
对于字符串中的每个字符c(从左到右).
.,且堆栈中的元素少于2个,则在堆栈上推1。.,并且堆栈有2个或多个元素,则从堆栈中弹出两个顶部的值,并将它们的和推到堆栈上。:,且堆栈中的元素少于2个,则在堆栈上推送2。:,并且堆栈有2个或多个元素,则从堆栈中弹出两个顶级值,并将它们的产品推到堆栈上。得到的数字是堆栈顶部的值。您的程序应该将这个数字打印到stdout (带有可选的尾换行符)。
(一点分析表明,除非字符串的长度为偶数,否则只剩下一个数字,这就是我们忽略这些数字的原因。实际上,堆栈从来没有超过2个元素。)
例如,::...:.:.的号码是9:
2 1 2 2 /______ stack just after the character below is handled
2 2 4 4 5 5 7 7 9 \
: : . . . : . : . <-- string, one character at a time作为正常检查,下面是长度为1、3和5的所有字符串的数字:
. 1
: 2
... 2
..: 1
.:. 3
.:: 2
:.. 3
:.: 2
::. 4
::: 4
..... 3
....: 2
...:. 4
...:: 4
..:.. 2
..:.: 1
..::. 3
..::: 2
.:... 4
.:..: 3
.:.:. 5
.:.:: 6
.::.. 3
.::.: 2
.:::. 4
.:::: 4
:.... 4
:...: 3
:..:. 5
:..:: 6
:.:.. 3
:.:.: 2
:.::. 4
:.::: 4
::... 5
::..: 4
::.:. 6
::.:: 8
:::.. 5
:::.: 4
::::. 6
::::: 8.和:的字符串。发布于 2015-04-26 16:45:13
ib%1-i:1+?\~n;
5a*)?*+40.\b%1-0@i简单明了,小技巧/优化。
解释:
i =下一个输入字符的代码点,如果到达输入端,则为-1;a = 10;b = 11;) = >i编码点,b%1- top_of_stack mod 11 - 1掩蔽48 ('.') , 56 (':')到1 , 2i:1+?\~n;,如果输入结束,则打印最后一个结果并终止b%1-掩码输入到1 , 20@推送0i5a*)读取下一个输入,并将其屏蔽到0 , 1,与50相比1 (':')将前两个元素相乘,创建堆栈0积[0 sum]或[0+product=product]40.跳转(循环)回到(4,0)位置,我们的点4,i:1+?\~n;发布于 2015-04-26 16:47:41
我们只使用堆栈中的两个单元格。
开始在s0中设置一个值。
然后,在输入字符串中的每个奇数位置(从0开始计数),在s1中放一个值。
在每一个偶数位置,执行一个calc (加或乘)并存储导致s0。
因此,忘记堆栈,只使用2个变量,a和b。
f=s=>[...s].map((c,i)=>(c=c>'.',i&1?b=1+c:i?c?a*=b:a+=b:a=1+c))|a快速测试
for(i=0;i<128;i++)
{
b=i.toString(2).replace(/./g,v=>'.:'[v]).slice(1)
if(b.length&1) console.log(b,f(b))
} 输出
"." 1
":" 2
"..." 2
"..:" 1
".:." 3
".::" 2
":.." 3
":.:" 2
"::." 4
":::" 4
"....." 3
"....:" 2
"...:." 4
"...::" 4
"..:.." 2
"..:.:" 1
"..::." 3
"..:::" 2
".:..." 4
".:..:" 3
".:.:." 5
".:.::" 6
".::.." 3
".::.:" 2
".:::." 4
".::::" 4
":...." 4
":...:" 3
":..:." 5
":..::" 6
":.:.." 3
":.:.:" 2
":.::." 4
":.:::" 4
"::..." 5
"::..:" 4
"::.:." 6
"::.::" 8
":::.." 5
":::.:" 4
"::::." 6
":::::" 8发布于 2015-04-26 17:52:42
k[2],n;f(char*c){for(n=0;*c;)k[n]=*c++-58?n>1?n=0,*k+k[1]:1:n>1?n=0,*k*k[1]:2,k[1]=n++?k[1]:0;return*k;}这太长了。
https://codegolf.stackexchange.com/questions/49232
复制相似问题