人気のあるウェブコミックHomestuckは、~ATH
宇宙を破壊するために呼び出されるプログラミング言語を使用しています。このゴルフの挑戦は、私たちの存在を全滅させるプログラムを書くことではありませんが、もっと面白くない(あまり面白くない)エンティティを破壊します:variables。
~ATH
( "til death"と発音します。~ath
"tilde ath"はどのように機能するかを確認してください)は、という変数を作成しTHIS
、でコマンドを実行しEXECUTE
、でプログラムを終了することで機能しTHIS.DIE()
ます。Homestuckでの言語の使用に関するWikiページは、ここにあります。この課題の目標は、~ATH
通訳を作成することです。
挑戦のために、私は~ATH
実際には存在しないいくつかの詳細を作成しますが、それを(ある程度)有用にします。
- この言語は、で宣言されている整数でのみ機能します
import <variable name>;
。変数は自動的に値0に設定されます。一度にインポートできる変数は1つだけです。 - 変数
x
は、書き込みによってコピーできますbifurcate x[y,z];
。これにより、変数が削除されx
、同一の変数y
およびに置き換えられますz
。削除された変数と同じ名前の変数を作成できないことに注意してください。基本的に、変数の名前が変更され、別の名前の変数のコピーが作成されます。これは馬鹿げた機能のように見えますが、愚かさはHomestuck に非常に深く根付いています。 - コードを実行するプログラムを記述するための構文
x
は~ATH(x){EXECUTE(<code>)}
です。2つの変数に対して同時にコードを実行する場合、コードは次のようにネストされます~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
できるだけ実際に一致させようとしています)。