流行的网络漫画《Homestuck》利用一种称为~ATH
破坏宇宙的编程语言。尽管此代码挑战不是要编写一个能够消灭我们的存在的程序,但我们将破坏一些驯服(尽管不太有趣)的实体:变量。
~ATH
(读作“直到死亡”,注意~ath
“ tilde ath”的工作方式)是通过创建一个名为的变量THIS
,使用来执行命令EXECUTE
,并使用来完成程序的THIS.DIE()
。在Homestuck中使用该语言的Wiki页面可在此处找到。这项挑战的目标是创建一个~ATH
口译员。
为了应对挑战,我将创建一些~ATH
实际上并不存在的细节,但要使其(某种程度上)有用。
- 该语言仅适用于以声明的整数
import <variable name>;
。该变量将自动设置为0值。一次只能导入一个变量。 x
可以通过写入来复制变量bifurcate x[y,z];
,这将删除该变量x
并将其替换为相同的变量y
和z
。请注意,它无法创建与已删除变量同名的变量。本质上,将重命名变量,然后创建具有不同名称的变量副本。这似乎是一个愚蠢的功能,但愚蠢是非常深刻根深蒂固的Homestuck。- 语法编写上执行代码的程序
x
是~ATH(x){EXECUTE(<code>)}
。如果要同时在两个变量上执行代码,则代码将嵌套,如下所示:~ATH(x){~ATH(y){EXECUTE(<code>)}}
。中的所有命令都<code>
将在x
和上执行y
。 - 现在让我们进入命令。
+
将相关变量加1并-
减1。然后就可以了。 - 的最后一个特点
~ATH
是,它杀死了所有与之兼容的东西。变量<name>=<value>
以命令格式(后跟换行符)打印[<name>].DIE();
。然后,程序打印单词DIE <name>
和换行符的次数等于变量值的绝对值。当同时杀死变量时[<name1>,<name2>].DIE();
(只要存在,就可以杀死任意多个变量),DIE()
命令将按顺序对变量执行。
范例程序
程序1:
import sollux; //calls variable "sollux"
import eridan; //calls variable "eridan"
~ATH(sollux){EXECUTE(--)} //sets the value of "sollux" to -2
~ATH(eridan){EXECUTE(+++++)} //sets the value of "eridan" to 5
[sollux].DIE(); //kills "sollux", prints "DIE sollux" twice
~ATH(eridan){EXECUTE(+)} //sets the value of "eridan" to 6
[eridan].DIE(); //kills "eridan", prints "DIE eridan" 6 times
输出:
sollux=-2
DIE sollux
DIE sollux
eridan=6
DIE eridan
DIE eridan
DIE eridan
DIE eridan
DIE eridan
DIE eridan
程式2:
import THIS; //calls variable "THIS"
~ATH(THIS){EXECUTE(++++)} //sets the value of "THIS" to 4
bifurcate THIS[THIS1,THIS2]; //deletes "THIS", creates variables "THIS1" and "THIS2" both equal to 4
~ATH(THIS1){EXECUTE(++)} //sets the value of "THIS1" to 6
[THIS1,THIS2].DIE(); //kills "THIS1" and "THIS2", prints "DIE THIS1" 6 times then "DIE THIS2" 4 times
import THAT; //calls variable "THAT"
bifurcate THAT[THESE,THOSE]; //deletes "THAT", creates variables "THESE" and "THOSE"
~ATH(THESE){~ATH(THOSE){EXECUTE(+++)}EXECUTE(++)} //sets the value of "THESE" and "THOSE" to 3, then sets the value of "THESE" to 5
[THESE,THOSE].DIE(); //kills "THESE" and "THOSE", prints "DIE THESE" 5 times then "DIE THOSE" 3 times
输出:
THIS1=6
DIE THIS1
DIE THIS1
DIE THIS1
DIE THIS1
DIE THIS1
DIE THIS1
THIS2=4
DIE THIS2
DIE THIS2
DIE THIS2
DIE THIS2
THESE=5
DIE THESE
DIE THESE
DIE THESE
DIE THESE
DIE THESE
THOSE=3
DIE THOSE
DIE THOSE
DIE THOSE
这是代码高尔夫球,因此适用标准规则。以字节为单位的最短代码获胜。
~ATH
使用分号作为行结束的import
,bifurcate
和DIE
命令。REPL和文件都可以。输入和输出都要求区分大小写(我正在尝试尽可能匹配实际值~ATH
)。