เกลียว , คะแนน: 61921 5127 4715 4655 4191
4.X~>v+^#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v
X * X X X X X X X X X X X X X X X X X X X X X X X X X
! > h y t f V b n j u [ ( 1 3 2 ) ] U J N B F T Y H G
0;vgv*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*vvv****v+^v+^v+^v+^*v++4
X X X X X X X X X X X X X X X X X X X X X X X X X X
v v v v v v v v v v v v v v v v v v v v v v v v v v
Y y J F V u t U [ G H B n 3 N 2 j ) h g f ] ( 1 b T
ล่ามสามารถพบได้ที่นี่
คำอธิบาย:
P.X~ZZ*v+^#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v
X X X X X X X X X X X X X X X X X X X X X X X X X X
! h y t f V b n j u r d c m k i e s x l o w a z p q
0;vgv*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*****************************************************************vP
X X X X X X X X X X X X X X X X X X X X X X X X X X
v v v v v v v v v v v v v v v v v v v v v v v v v v
z y x w V u t s r q p o n m l k j i h g f e d c b a
โปรแกรมเริ่มต้นที่0ตัวละครในบรรทัดที่สี่ 0;vgชิ้นแรกของรหัสที่จะวิ่งเป็น ;ใช้ตัวเลขเป็นอินพุตและวางลงในสแต็ก vวางสิ่งที่อยู่ในรีจิสเตอร์ (ศูนย์) ลงในสแต็ก มันจะถูกใช้เป็นตัวนับ gเป็นฉลากเมื่อถึงตัวควบคุมจะข้ามไปที่การเกิดขึ้นของตัวอักษรอื่น ๆgในรหัส
ดังนั้นนี่คือที่ซึ่งการควบคุมอยู่ในขณะนี้:
X
v
g
เนื่องจากมีช่องว่างในทิศทางอื่นทั้งหมดตัวชี้คำสั่งจะเริ่มเลื่อนขึ้น
vวางศูนย์ลงในสแต็กและXดึงจากสแต็กทันที เนื่องจากค่าที่ผุดเป็นศูนย์ตัวชี้คำสั่งจะย้ายไปที่X(มิฉะนั้นจะถือว่าเป็นช่องว่าง)
ตามค่าเริ่มต้นโฟลว์ควบคุมอยู่ในโหมดเลี้ยวขวาดังนั้นตอนนี้เมื่อถึงทางแยกตัวชี้คำสั่งจะเปลี่ยนไปทางขวา vยังผลักศูนย์อีกครั้งในกองซ้อน*เพิ่มการลงทะเบียนหนึ่งรายการ
v*v*v
X
v
g
ถัดไปvสถานที่สิ่งที่อยู่ในการลงทะเบียน (หมายเลข 1) Xเป็นกลุ่มที่มีความพยายามในการเรียนการสอนชี้ไปเลี้ยวขวาตีต่อไป ค่าที่เพิ่งเพิ่มไปยังสแต็กจะถูกตอกและวางไว้ในการลงทะเบียน เพราะมันไม่ได้เป็นศูนย์Xไม่ได้ป้อนและ IP ดำเนินการต่อไป*ทางด้านขวาแทนเพิ่มค่าในการลงทะเบียนอีกครั้ง
v*v*v*v*v
X X X X X
v v v v v
i h g f e
สิ่งนี้จะเกิดขึ้นซ้ำแล้วซ้ำอีกจนกว่าเราจะไปถึงจุดสิ้นสุดของส่วนนี้และจุด*เริ่มต้นของ โดยตอนนี้คุ้มค่าในการลงทะเบียนคือ 6 ซึ่งเป็นตัวอักษร ASCII ตัวอักษรg ASCII ลบ aดังนั้นด้วยบรรทัด 97 *s เราจึงเพิ่มค่าใน register เป็น 103 ซึ่งตรงกับตัวอักษรที่gเราต้องการพิมพ์ vผลักมันลงในสแต็กและPเป็นอีกเลเบลเมื่อกดปุ่มซึ่งเราจะข้ามไปที่อีกPบรรทัดหนึ่งของรหัส
ที่นี่.จะปรากฏค่าจากสแต็กและพิมพ์เป็นอักขระ หลังจากนั้นXจะปรากฏศูนย์ภายนอกจากสแต็กจากนั้น~เปรียบเทียบค่าที่เหลือสองค่าในสแต็ก หากค่าเหมือนกันตัวดำเนินการจะวางศูนย์ในสแต็ก (มิฉะนั้น -1 หรือ 1) อีกครั้งการควบคุมพยายามที่จะเลี้ยวขวา Xดึงค่าของการเปรียบเทียบจากสแต็กถ้าเป็นศูนย์Xและหลังจาก!ป้อนแล้วการยกเลิกโปรแกรม
P.X~ZZ*v+^
X
!
มิฉะนั้น IP จะยังคงอยู่Zซึ่งเป็นป้ายกำกับซึ่งในกรณีนี้จะข้ามไปทางขวาหนึ่งขั้นเท่านั้น เหตุผลในการทำเช่นนี้คือการกระโดดกำหนดค่าในรีจิสเตอร์กลับเป็นศูนย์ *เพิ่มการลงทะเบียนและvวาง 1 ผลลัพธ์ลงในสแต็ก +ดึงองค์ประกอบสองอันดับแรกของสแต็ก (1 และตัวนับ) เพิ่มพวกมันและวางผลลัพธ์ลงในสแต็ก (ซึ่งจะเพิ่มตัวนับทีละหนึ่ง) ^คัดลอกผลลัพธ์จากสแต็กไปยังรีจิสเตอร์โดยไม่ลบออกจากสแต็ก
#ลดค่าในการลงทะเบียนทีละหนึ่งvผลักดันค่าที่ลดลงไปยังสแต็ค IP พยายามที่จะเลี้ยวไปทางขวาและXดึงค่าจากสแต็ก หากค่าไม่เป็นศูนย์ IP จะย้ายไปทางทิศตะวันออกลดค่าในการลงทะเบียนจนกว่าจะถึงศูนย์และ IP จะเข้าสู่Xสาขา
#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v
X X X X X X X X X X X X X X X X X X X X X X X X X
h y t f V b n j u r d c m k i e s x l o w a z p q
สาขานำไปสู่ฉลากที่สอดคล้องกับค่าของตัวนับ เมื่อกดปุ่มฉลากการควบคุมจะข้ามไปที่การเกิดขึ้นของป้ายกำกับในส่วนที่เราเริ่มต้นด้วยป้ายกำกับgเริ่มต้นซ้ำอีกครั้ง เช่นเดียวกับgค่าในรีจิสเตอร์จะเพิ่มขึ้นเป็นค่า ASCII ของตัวอักษรที่เราต้องการพิมพ์ จากนั้นตัวละครจะถูกพิมพ์และตัวนับที่เพิ่มขึ้นจะมีการเลือกป้ายกำกับอื่น สิ่งนี้จะเกิดขึ้นจนกระทั่งหลังจากการทำซ้ำครั้งล่าสุดตัวนับจะเท่ากับอินพุตและโปรแกรมจะสิ้นสุดลง
แก้ไข:
P.X~Zv+^
X *
! Z
บรรลุสิ่งเดียวกัน
P.X~ZZ*v+^
X
!
แต่มีช่องว่างน้อยกว่า
แก้ไข 2:
vv****v+^v+^v+^v+^*v++P
สามารถใช้แทน:
*****************************************************************vP