Homestuckคอมมิวนิคยอดนิยมใช้ประโยชน์จากภาษาโปรแกรมที่เรียกว่า~ATHทำลายจักรวาล ขณะนี้ความท้าทายกอล์ฟรหัสคือไม่ได้ที่จะเขียนโปรแกรมที่จะทำลายการดำรงอยู่ของเราเราจะถูกทำลายบางส่วนเชื่องมากขึ้น (แม้จะน่าสนใจไม่น้อย) หน่วยงาน: ตัวแปร
~ATH(ออกเสียง "til ตาย" แจ้งว่า~athเป็น "ตัวหนอน ATH") ทำงานโดยการสร้างตัวแปรที่เรียกว่าTHISการดำเนินการคำสั่งที่มีและจบโปรแกรมด้วยEXECUTE THIS.DIE()หน้าวิกิพีเดียสำหรับการใช้ภาษาใน Homestuck สามารถพบได้ที่นี่ เป้าหมายของการท้าทายนี้คือการสร้าง~ATHล่าม
เพื่อความท้าทายฉันจะสร้างรายละเอียดบางอย่าง~ATHที่ไม่มีอยู่จริง ๆ แต่ทำให้มีประโยชน์ (บ้าง)
import <variable name>;ภาษาเดียวที่จะทำงานร่วมกับจำนวนเต็มซึ่งจะมีการประกาศด้วย ตัวแปรจะถูกตั้งค่าเป็น 0 โดยอัตโนมัติสามารถนำเข้าตัวแปรได้ครั้งละหนึ่งตัวเท่านั้น- ตัวแปร
xสามารถคัดลอกโดยการเขียนbifurcate x[y,z];ซึ่งจะลบตัวแปรxและแทนที่ด้วยตัวแปรที่เหมือนกันและyzโปรดทราบว่ามันไม่สามารถสร้างตัวแปรที่มีชื่อเดียวกับที่ถูกลบ โดยพื้นฐานแล้วตัวแปรจะถูกเปลี่ยนชื่อจากนั้นจะสร้างสำเนาของตัวแปรที่มีชื่อแตกต่างกัน นี้ดูเหมือนว่าคุณลักษณะโง่ แต่ความโง่เขลาถูกมากลึกฝังแน่นใน Homestuck - ไวยากรณ์สำหรับการเขียนโปรแกรมที่รันโค้ดบนมี
xหากคุณต้องการที่จะรันโค้ดบนตัวแปรทั้งสองพร้อมกันจะกลายเป็นรหัสที่ซ้อนกันเช่นนี้~ATH(x){EXECUTE(<code>)}~ATH(x){~ATH(y){EXECUTE(<code>)}}คำสั่งทั้งหมดใน<code>จะถูกดำเนินการทั้งในและxy - ทีนี้มาดูคำสั่งกันดีกว่า
+เพิ่มตัวแปรที่เกี่ยวข้องทีละ 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ให้มากที่สุด)