摘要
制作了一种新的字符串操作语言,仅使用字符$+#-!*|@>
!您的任务是在尽可能少的字节中为其实现一个解释器。
输入值
字符串,是此语言的一行。可以采用任何合理的方式(标准输入,函数参数,命令行参数等)或将其用作预定义变量。如果程序要求用户输入,请接受它从stdin要求的所有用户输入,仅此而已,请参见下文。您可能会认为它是一个有效程序。
输出量
无论使用哪种语言输出,以下说明。您必须以任何合理的方式(标准输出,函数输出等)输出字符串或变量值。语言明确输出后,必须转到stdout。禁止出现标准漏洞。
语言规格
处理和语法
该语言具有非常简单的处理形式,因为它仅执行字符串操作:它以空字符串(""
)开头,并随每个术语进行更改。一个术语由一个或两个部分组成:一个函数(在下面),然后可能是一个参数(在下面),用于编辑其行为。术语用竖线(|
)分隔。您可能会认为它不会是一个空程序,并且任何条件都不会是空的。您应该在程序末尾输出该值。
功能
该语言只有6种功能,如下所示。每个函数都接受一个或零个参数。
+
连接字符串(采用一个字符串参数,将其连接到当前值)!
反转当前值的字符顺序(无参数)*
重复字符串(采用一个整数参数,将当前值重复多次)-
删除所有出现的值(采用一个字符串参数,从当前值删除所有出现的值)$
[pseudo-]随机改组当前值(无参数)<
将当前值输出到stdout
(无参数)
价值观
这些是可以传递给函数的值,由匹配它们的正则表达式表示:
@[^|]*
字符串文字,包括除管道以外的任何字符。它可能是空的。#[0-9]+
整数文字>
下一行stdin
。如果与一起使用*
,则转换为整数。
测试用例
╔════════════════════════╤═════════════╤══════════════╗
║code │input │output ║
╟────────────────────────┼─────────────┼──────────────╢
║+>|!|+@hello|*> │13 │31hello31hello║
║ │2 │ ║
╟────────────────────────┼─────────────┼──────────────╢
║+>|+@abcdefg|$ │hello │hcloeebafdlg ║
╟────────────────────────┼─────────────┼──────────────╢
║+@how areyou|-@o|-> │w │h areyu ║
╟────────────────────────┼─────────────┼──────────────╢
║+@out|<|*#3 │ │out ║
║ │ │outoutout ║
╟────────────────────────┼─────────────┼──────────────╢
║+> │what ever 345│what ever 345 ║
╟────────────────────────┼─────────────┼──────────────╢
║+@$pe<i@l|<|-@$pe<i@l|+>│A|$o $pe<!@| │$pe<i@l ║
║ │ │A|$o $pe<!@| ║
╟────────────────────────┼─────────────┼──────────────╢
║<|+>|!|< │input text | ║
║ │ │txet tupni ║
║ │ │txet tupni ║
╟────────────────────────┼─────────────┼──────────────╢
║+@># │ |># ║
╚════════════════════════╧═════════════╧══════════════╝
请注意,测试用例2是随机的,因此其中的所有字符排列都是有效的。另外,表中的输出用换行符分隔,但是您的程序不必这样做。每种情况下的最后一个值是最终输出。
范例(Un-golfed)python解释器
在线尝试!如果通过IDLE或其他方式运行IMO,则效果更好。(之后,我将其压缩到424字节,但我敢肯定,您可以做得更好)。
<
遇到时都会换行。这是强制性的吗?
+@>#
?我也用过#
。