Das beliebte Webcomic Homestuck verwendet eine Programmiersprache, die ~ATHdazu dient, Universen zu zerstören. Während diese Code-Golf-Herausforderung nicht darin besteht, ein Programm zu schreiben, um unsere Existenz zu vernichten, werden wir einige zahmere (wenn auch weniger interessante) Entitäten zerstören: Variablen .
~ATH(ausgesprochen "bis zum Tod", beachten Sie, wie ~ath"tilde ath" ist), indem Sie eine aufgerufene Variable erstellen THIS, einen Befehl mit ausführen EXECUTEund das Programm mit beenden THIS.DIE(). Eine Wiki-Seite für die Verwendung der Sprache in Homestuck finden Sie hier . Ziel dieser Herausforderung ist es, einen ~ATHDolmetscher zu erstellen .
Um der Herausforderung willen werde ich einige Details erstellen ~ATH, die es nicht wirklich gibt, aber die es (etwas) nützlich machen.
- Die Sprache funktioniert nur mit Ganzzahlen, die mit deklariert sind
import <variable name>;. Die Variable wird automatisch auf den Wert 0 gesetzt. Es kann jeweils nur eine Variable importiert werden. - Eine Variable
xkann durch Schreiben kopiert werdenbifurcate x[y,z];, wodurch die Variable gelöschtxund durch identische Variablenyund ersetzt wirdz. Beachten Sie, dass keine Variable mit demselben Namen wie die gelöschte erstellt werden kann. Im Wesentlichen wird eine Variable umbenannt und anschließend eine Kopie der Variablen mit einem anderen Namen erstellt. Dies scheint ein dummer Zug zu sein, aber die Dummheit ist sehr tief verwurzelt in Homestuck . - Die Syntax zum Schreiben eines Programms, in dem Code ausgeführt wird,
xlautet~ATH(x){EXECUTE(<code>)}. Wenn Sie Code auf zwei Variablen gleichzeitig ausgeführt werden soll, wird der Code verschachtelt, wie folgt aus :~ATH(x){~ATH(y){EXECUTE(<code>)}}. Alle eingehenden Befehle<code>werden aufxund ausgeführty. - Gehen wir nun zu den Befehlen über.
+erhöht relevante Variable (n) um 1 und-dekrementiert sie um 1. Und ... das war's. - Das letzte Merkmal von
~ATHist, dass es alles tötet, womit es funktioniert. Variablen werden im Format<name>=<value>(gefolgt von einer neuen Zeile) auf Befehl gedruckt[<name>].DIE();. Danach gibt das Programm das WortDIE <name>und eine neue Zeile so oft aus, wie der absolute Wert des Werts der Variablen entspricht. Wenn Variablen gleichzeitig mit getötet werden[<name1>,<name2>].DIE();(Sie können so viele Variablen töten lassen, wie Sie möchten, solange sie existieren), wird derDIE()Befehl nacheinander für die Variablen ausgeführt.
Beispielprogramme
Programm 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
Ausgabe:
sollux=-2
DIE sollux
DIE sollux
eridan=6
DIE eridan
DIE eridan
DIE eridan
DIE eridan
DIE eridan
DIE eridan
Programm 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
Ausgabe:
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
Dies ist Codegolf, daher gelten die Standardregeln. Kürzester Code in Bytes gewinnt.
~ATHverwendet Semikolons als Zeilenenden für das import, bifurcateund DIEBefehle. Sowohl REPL als auch Dateien sind in Ordnung. Sowohl in der Eingabe als auch in der Ausgabe muss die Groß- und Kleinschreibung beachtet werden (ich versuche, die tatsächliche Schreibweise ~ATHso weit wie möglich zu berücksichtigen).