高尔夫紫色口译员
Purple是一种esolang,其设计目的主要有两个:
- 尽量减少茄子,因为周围没有足够的自修改单指令语言。
- 承认有可能会出现可怕的小型高尔夫口译员。我在功能相当合理的Python 2解释器上的第一次访问只有702个字节,而且我相信经验丰富的高尔夫球手可以从中获得很多好处。
您的目标是为此语言编写翻译。
紫色信息:
紫色程序是一系列字符,它们放置在一个无限的可寻址存储器阵列中,从而程序的第一个字符位于地址零。数组的其余部分(存储Purple程序的前后)都初始化为零。
Purple中有三个寄存器,分别称为a和b和i,每个寄存器可以保存一个有符号整数,并初始化为零。i还是指令指针,并且始终指向当前正在执行的Purple指令。
每个周期,解释器将从指令指针指示的存储位置开始读取三个连续字符的序列,并尝试将该序列作为Purple指令执行。之后,指令指针总是增加3。
在语法上,Purple指令连续包含三个字符(或其编码),例如“ xyz ”。
第一个字符x可以是以下任意一个:
abABio
这些符号具有以下含义:
a - Place the result in register a.
b - Place the result in register b.
A - Place the result in the location in memory referred to by register a.
B - Place the result in the location in memory referred to by register b.
i - Set the instruction pointer to the result.
o - Output the result to stdout.
其他两个字节y和z可以是以下任意一个:
abABio1
这些符号各自具有以下含义:
a - Return the contents of register a.
b - Return the contents of register b.
A - Return the contents of the memory array at the address stored in register a.
B - Return the contents of the memory array at the address stored in register b.
i - Return the contents of register i (the instruction pointer).
o - Return the value of a single character read from stdin.
1 - Return the literal numeric value 1.
提取指令后,Purple解释器将先对y进行评估,然后对z进行评估,然后从y的结果中减去z的结果,然后对差异执行x指示的操作。
如果三个字符的序列(或其编码)不是有效的Purple指令,则解释器将立即停止而不会出现任何错误。
您的口译员必须:
- 是一个完整的程序,而不是一个功能。
- 除非读取EOF,否则切勿输出到stderr 。
- 在所有格式不大的输入中,其行为与参考实现相同,包括下面给出的测试程序。(嗯,同样取决于时间-它可以运行得较慢,但不会太大!)
您可以按照希望的任何形式将程序提供给解释器:从文件中读取程序,将其作为字符串嵌入程序中,或从标准输入中读取。
测试用例:
该程序
ooo
使用输入运行时
z!
应该屈服
Y
该程序
bbboobiii
使用输入运行时
It's a cat program.
(或任何其他输入)应产生
It's a cat program.
(或收到的任何输入),然后重新开始并再次执行相同的操作。
该程序
Aoab11bi1bABoAaiba
使用输入运行时
0
应该屈服
0
然后停止,但是当使用输入运行时
1
应该继续输出
1
永远。
该程序
b1bbb1oAbabaa1ab1Ab1Bi1b
应该屈服
b1bbb1oAbabaa1ab1Ab1Bi1b
该程序
aA1aa1bb1oAbbi1bb1bbAb1Bi1b Purple is the awesomest! Why haven't you tried it yet?
!dlroW ,olleG
应该屈服
Hello, World!
得分:
这是code-golf,因此以字节为单位的最短源(可能由以下奖励修改)获胜。
奖金:
- 如果您的解释器从stdin或命令行参数读取文件名并从文件中加载程序,则为-10%。
uint32
的字符,MAXINT为整数