做一个!!!批处理编译器/转换器
!!!Batch是Windows批处理编程语言的另一个派生版本,它的wiki就在这里。您的挑战是创建一个编译器/转换器来读取!!!批处理程序并返回Windows批处理程序.In
解答动态
C(gcc),142 bytes 该函数使用状态机来确定每个令牌:
loop:加载下一个输入字符,直到stringstate 0结束(初始?):清除计数器,然后转到状态1状态1(!还是终止?,+或-):增量!,否则打印字符(调整计数96[?]或64[+],或索引正确的符号[-])并转到状态2(状态0表示?)状态2(如果是终止的+或-):转到状态0 t,c,n;f(char*s){(t=0;c=*s++;)t?t-1?t=0:c-33?c-63?t++,c-43?n=amp?!%/:0123456789=+-gt;@*";[n-1]:(n+=64):(n+=96,t=0),putchar(n):n++:(n=0,t++);} 联机试用!
05AB1E,41字节 ?Kεθ!+斯卡杜?hlt;quot;)?èy?¢è 以字符列表的形式输出。
请联机尝试(页脚将结果列表连接起来以字符串的形式打印;可以随意删除它以查看实际的列表输出)。
Ex夷平面:
按(隐式)输入字符串的第一个字符:quot;#拆分该字符的输入?K#删除所有空字符串ε#映射到每个字符串:θ#弹出并按下其最后一个字符?!+#推串quot;sk#获取此字符串中最后一个字符的索引,#(如果找不到,则为-1)A#Push小写字母Du#创建大写副本?h?Push builtinquot;lt;quot;?Push this string,其中?会自动填充0123456789)?将所有值包装到一个list??Extract head;弹出并将余数列表和第一个分隔的项?使用此索引(基于0的modulair)索引到三元组?(其中-1对于quot;将索引到最后一项)y#再次按下当前字符串,并提取其头部:quot;¢#计算它在余数字符串中出现的次数#基于0的索引将此索引放入字符串#(映射后,生成的字符列表将隐式输出) ;amp?!%/.:0123456789=+-gt;@*";有点太不规则,无法压缩。对于这个直接向前的字符串,我能找到的最短的替代方法是?Q33£S?1Δáε?I?β?f31?.I(?Q push printable ASCII builtin;33£leave just its first 33 characters;S convert it from a string to a list of characters;?1ΔáεI?β?f30?它的长度是6字节。
Stax,53 46字节 é▼V0?196╟236?(Φzf■┘╔╣T╘K*╪?w2¥╧zv-?╨?P?ε?í?q* Run and debug it
I无法找到与符号匹配的表达式,因此这些符号是硬编码的(并且占用了大量空间)?/{f{%\u右。-+I{amp?!%/.:quot;=+-gt;+@}{63+}{96+}3l@!m
'?/分开?
{f remove empty lists
{..m将字符串映射到:
%push匹配的长度
\uuupush匹配again
rDh获取倒数第二个字符
.-+I索引在quot;
@!执行相应的块索引:
{lt;amp?!%/.:quot;=+-quot;@*quot;Vd+lt;lt;amp?!%/.:0123456789=+-使用长度(模块化)
{96+}否则添加91
JavaScript(节点.js),118 bytes s=gt;x[i=x.length-2]amp?!%/.:0123456789=+-gt;@*'[i-2]:String.fromCharCode(x[i]gt;s.替换(/。)。!+([+-])?./g、 (x,y)=gt;','?'lt;>;@*'[i-4]:String.fromCharCode(61+i+33*!y) ))在线试用!
非常简单的答案。
Red,169 bytes func[s][r:copyquot;?quot?!%/:0123456789=+-gt;@*";d-1]]]r] 在线试用!
视网膜0.8.2,94字节 \?!!!\?a!+\?A-!!!!!\?%+T`\u o`lL%/:d=+\-gt;@*!_`!(?![?!]).!\?$&;!(?=..(.))!*…11美元在线试用!前任夷平面:
\?!! 雷姆- End
免责声明:
本页内容仅代表作者本人意见,若因此产生任何纠纷由作者本人负责,概与琴岛网公司无关。本页内容仅供参考,请您根据自身实际情况谨慎操作。尤其涉及您或第三方利益等事项,请咨询专业人士处理。