Popüler webcomic Homestuck , ~ATH
evreni yok etmek için adlandırılan bir programlama dilini kullanıyor . Bu kod golf zorluğu varlığımızı yok etmek için bir program yazmak olmasa da, biraz daha uysal (daha az ilginç olsa da) varlıkları: değişkenleri yok edeceğiz .
~ATH
("ölüm kadar telaffuz edilir" ~ath
, "tilde ath" nin nasıl olduğunu fark edin ) adlı bir değişken oluşturarak THIS
, komut vererek EXECUTE
ve programı bitirerek çalışır THIS.DIE()
. Homestuck'ta dil kullanımı için bir wiki sayfası burada bulunabilir . Bu zorluğun amacı bir ~ATH
tercüman yaratmak olacaktır .
Zorluk uğruna, ~ATH
bunun gerçekte var olmayan ama onu (biraz) faydalı kılan bazı ayrıntılarını yaratacağım .
- Dil yalnızca ile bildirilen tamsayılarla çalışır
import <variable name>;
. Değişken otomatik olarak 0 değerine ayarlanır. Bir seferde yalnızca bir değişken içe aktarılabilir. - Bir değişken
x
yazı ile kopyalanabilir.bifurcate x[y,z];
Bu değişken değişkeni silerx
ve aynı değişkenlerle değiştiriry
vez
. Silinenle aynı ada sahip bir değişken oluşturamayacağını unutmayın. Temel olarak, bir değişken yeniden adlandırılır, daha sonra değişkenin farklı bir ada sahip bir kopyası oluşturulur. Bu aptalca bir özellik gibi görünüyor, ancak aptallık Homestuck'ta çok derinden kökleşmiş . - Kod çalıştırır bir program yazmak için sözdizimi
x
olduğunu~ATH(x){EXECUTE(<code>)}
. Aynı anda iki değişkene kodu çalıştırmak istiyorsanız, kodu şöyle, iç içe olur:~ATH(x){~ATH(y){EXECUTE(<code>)}}
. Tüm komutlar içinde<code>
hem yürütülecektirx
vey
. - Şimdi komutlara geçelim.
+
ilgili değişken (ler) i 1-
arttırır ve onları 1 azaltır. Ve ... bu kadar. - Nihai özelliği,
~ATH
çalıştığı her şeyi öldürmesidir. Değişkenler<name>=<value>
komutta (ardından bir satırsonu) biçiminde yazdırılır[<name>].DIE();
. Daha sonra, program kelimeyiDIE <name>
ve bir satırsonunu değişkenin değerinin mutlak değerine eşit sayıda yazdırır . Değişkenler ile eşzamanlı olarak öldürüldüğünde[<name1>,<name2>].DIE();
(var oldukları sürece, istediğiniz kadar çok değişkeni öldürebilirsiniz),DIE()
komut değişkenler üzerinde sırayla yürütülür.
Örnek programlar
Program 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
Çıktı:
sollux=-2
DIE sollux
DIE sollux
eridan=6
DIE eridan
DIE eridan
DIE eridan
DIE eridan
DIE eridan
DIE eridan
Program 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
Çıktı:
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
Bu kod golf, bu yüzden standart kurallar geçerlidir. Bayt cinsinden en kısa kod kazanır.
~ATH
için hat uçlarının olarak virgül kullanır import
, bifurcate
ve DIE
komutlar. Hem REPL hem de dosyalar iyidir. Büyük / küçük harf duyarlılığı hem giriş hem de çıkışta gereklidir (Gerçek olanı ~ATH
mümkün olduğunca eşleştirmeye çalışıyorum ).