Homestuckคอมมิวนิคยอดนิยมใช้ประโยชน์จากภาษาโปรแกรมที่เรียกว่า~ATH
ทำลายจักรวาล ขณะนี้ความท้าทายกอล์ฟรหัสคือไม่ได้ที่จะเขียนโปรแกรมที่จะทำลายการดำรงอยู่ของเราเราจะถูกทำลายบางส่วนเชื่องมากขึ้น (แม้จะน่าสนใจไม่น้อย) หน่วยงาน: ตัวแปร
~ATH
(ออกเสียง "til ตาย" แจ้งว่า~ath
เป็น "ตัวหนอน ATH") ทำงานโดยการสร้างตัวแปรที่เรียกว่าTHIS
การดำเนินการคำสั่งที่มีและจบโปรแกรมด้วยEXECUTE
THIS.DIE()
หน้าวิกิพีเดียสำหรับการใช้ภาษาใน Homestuck สามารถพบได้ที่นี่ เป้าหมายของการท้าทายนี้คือการสร้าง~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
ให้มากที่สุด)