บทนำ
Kippleเป็นภาษาการเขียนโปรแกรมแบบกองซ้อนซึ่งเป็นความลับที่คิดค้นโดย Rune Berg ในเดือนมีนาคม 2003
Kipple มี 27 กอง 4 ตัวดำเนินการและโครงสร้างการควบคุม
สแต็ค
สแต็กถูกตั้งชื่อa- zและมีจำนวนเต็ม 32 บิต นอกจากนี้ยังมีสแต็กพิเศษ@เพื่อให้หมายเลขเอาต์พุตสะดวกยิ่งขึ้น เมื่อตัวเลขถูกส่งเข้าสู่@ค่า ASCII ของตัวเลขนั้นจะถูกผลักเข้าไปแทน (ตัวอย่างเช่นหากคุณกด 12 ถึง@จะได้ 49 และ 50 @แทน)
อินพุตถูกส่งไปยังอินพุตสแต็กiก่อนที่โปรแกรมจะถูกดำเนินการ ล่ามจะถามหาค่าที่จะจัดเก็บiก่อนดำเนินการ หลังจากการดำเนินการเสร็จสิ้นสิ่งใดในเอาท์พุทสแต็คoจะถูกตอกไปยังเอาท์พุทเป็นตัวอักษร ASCII เนื่องจากนี่เป็นเพียงกลไก IO ของ Kipple เท่านั้นการโต้ตอบกับโปรแกรม Kipple จึงเป็นไปไม่ได้
ผู้ประกอบการ
ตัวถูกดำเนินการเป็นทั้งตัวระบุสแต็กหรือจำนวนเต็ม 32 บิตลงนาม
กด: >หรือ<
ไวยากรณ์: Operand>StackIndentifierหรือStackIndentifier<Operand
ตัวดำเนินการพุชนำตัวถูกดำเนินการไปทางซ้ายแล้วผลักไปยังสแต็กที่ระบุ ตัวอย่างเช่น12>aจะส่งค่า 12 ลงบนสแต็aก a>bจะป๊อปอัพค่าสูงสุดจากสแต็กaและกดลงบนสแต็bก การ popping สแต็กที่ว่างเปล่าส่งคืนค่า 0 a<bจะเท่ากับb>aเสมอ a<b>cปรากฏคุ้มค่าสูงสุดจากbและผลักดันทั้งสองและca
เพิ่ม: +
ไวยากรณ์: StackIndentifier+Operand
ตัวดำเนินการ Add จะเพิ่มผลรวมของรายการสูงสุดบนสแต็กและตัวถูกดำเนินการไปยังสแต็ก หากตัวถูกดำเนินการเป็นสแต็กค่าจะถูกดึงจากมัน ตัวอย่างเช่นหากค่าสูงสุดของสแต็กaคือ 1 ดังนั้นa+2จะผลัก 3 ลงไป ถ้าaว่างแล้วa+2จะกด 2 ลงไป หากค่าสูงสุดของสแต็กaและbเป็น 1 และ 2 แล้วa+bจะป๊อปค่า 2 จากสแต็กbและกด 3 ลงบนสแต็aก
ลบ: -
ไวยากรณ์: StackIndentifier-Operand
ตัวดำเนินการลบทำงานเหมือนกับตัวดำเนินการเพิ่มยกเว้นว่าจะลบแทนการเพิ่ม
ชัดเจน: ?
ไวยากรณ์: StackIndentifier?
ตัวดำเนินการ Clear จะล้างสแต็กหากรายการสูงสุดเป็น 0
a+2 this will be ignored c<iล่ามจะไม่สนใจอะไรที่ไม่ติดกับการดำเนินการเพื่อให้โปรแกรมดังต่อไปนี้จะทำงาน: อย่างไรก็ตามวิธีที่เหมาะสมในการเพิ่มความคิดเห็นคือการใช้#ตัวละคร สิ่งใดระหว่าง a #และอักขระสิ้นสุดบรรทัดจะถูกลบออกก่อนดำเนินการ อักขระ ASCII # 10 ถูกกำหนดเป็น end-of-line ใน Kipple
ถูกดำเนินการอาจจะใช้ร่วมกันโดยสองผู้ประกอบการเช่นอาจจะเขียนเป็นa>b c>b c?a>b<c?
โปรแกรมที่1>a<2 a+aจะส่งผลให้aมีค่า[1 4](จากล่างขึ้นบน) [1 3]และไม่ได้ ในทำนองเดียวกันสำหรับ-ผู้ประกอบการ
โครงสร้างการควบคุม
Kipple มีโครงสร้างการควบคุมเดียวเท่านั้น: การวนซ้ำ
ไวยากรณ์: (StackIndentifier code )
ตราบใดที่สแต็กที่ระบุไม่ว่างเปล่าโค้ดภายในวงเล็บที่ตรงกันจะถูกทำซ้ำ ลูปอาจมีลูปอื่น ยกตัวอย่างเช่น(a a>b)จะย้ายค่าทั้งหมดของสแต็คaบนสแต็คbแม้ว่าจะสั่งซื้อจะถูกกลับรายการ วิธีหน้าที่เหมือน (a>b)แต่สง่างามมากขึ้นที่จะทำคือ
ตัวอย่าง
100>@ (@>o)
สิ่งนี้จะออก 100
33>o 100>o 108>o 114>o 111>o 87>o 32>o 111>o 108>o 108>o 101>o 72>o
"Hello World!"นี้จะพิมพ์ เมื่อoสแต็กกำลังถูกเอาต์พุตมันจะเริ่มป๊อปอักขระจากด้านบนของสแต็กไปด้านล่าง
#prime.k by Jannis Harder
u<200
#change 200
k<2>m
u-2
(u-1 u>t u>z u<t
(k>e e+0 e>r)
(e>k)
m+1
m>t
m>z
m<t
t<0>z? t?
1>g
(r>b
m+0 m>a
b+0 b>w
(a-1
b+0 b>j
j?
1>s
(j<0>s j?)
s?
(s<0 w+0 w>b s?)
a>t
a>z
t>a
b-1
b>t
b>z
t>b
z<0>t? z?
a?)
b?
1>p
(b<0 b? 0>p)
p?
(p 0>r? 0>p? 0>g)
)
g?
(g m+0 m>k 0>g?)
u?)
(k>@
10>o
(@>o)
)
นี่คือตัวสร้างจำนวนเฉพาะ แต่ฉันไม่แน่ใจว่ามันทำงานอย่างไร
กฎระเบียบ
คุณต้องเขียนโปรแกรม / ฟังก์ชั่นที่ตีความ Kipple โปรแกรม / ฟังก์ชั่นนี้อาจได้รับโปรแกรม Kipple ผ่านไฟล์ต้นฉบับหรือรับมันผ่าน STDIN โดยตรงจากผู้ใช้ หาก STDIN ไม่พร้อมใช้งานจะต้องได้รับจากอินพุตคีย์บอร์ดและดำเนินการรับอินพุตต่อไปจนกว่าจะป้อนอักขระที่ไม่สามารถพิมพ์ได้ ตัวอย่างเช่นหากล่ามของคุณเขียนด้วยรหัสเครื่อง x86 มันจะได้รับตัวอักษรโปรแกรม Kipple ตามตัวอักษรจากแป้นพิมพ์และทำต่อไปจนกว่าจะกดesc(หรือปุ่มอื่นใดที่ไม่ได้พิมพ์อักขระที่พิมพ์ได้)
หากมีข้อผิดพลาดเช่นไวยากรณ์ผิดพลาดหรือแตกล้นก็จะต้องยอมรับมันในบางวิธีเช่นโดยการกลับมา 10 แทน 0 หรือข้อความที่ผลิตโดยล่าม / เรียบเรียงข้อผิดพลาดแต่ไม่พิมพ์ข้อความผิดพลาด
กฎทั่วไปอื่น ๆ สำหรับการตีกอล์ฟจะมีผลกับความท้าทายนี้
รหัสของคุณจะถูกทดสอบพร้อมกับตัวอย่างบางส่วนในคลังเก็บตัวอย่างของ Kipple
นี่คือรหัสกอล์ฟ โค้ดที่สั้นที่สุดเป็นไบต์จะเป็นผู้ชนะ โชคดี!
โปรดทราบว่ามีโอเปอเรเตอร์เสริมใน Kipple "แต่มันไม่ได้เป็นส่วนหนึ่งของข้อมูลจำเพาะและเป็นเพียงคุณสมบัติพิเศษในล่ามอย่างเป็นทางการ ฉันไม่ได้พูดถึงที่นี่ดังนั้นจึงไม่จำเป็นต้องได้รับการสนับสนุนในการส่งของคุณ
หากคุณมีข้อสงสัยเกี่ยวกับส่วนหนึ่งของข้อกำหนดใด ๆ ที่คุณสามารถตรวจสอบกับล่ามอย่างเป็นทางการเขียนใน Java นี่จะดาวน์โหลดไฟล์ zip ที่มีโปรแกรมที่คอมไพล์และซอร์สโค้ด มันได้รับอนุญาตภายใต้ GPL
iอย่างไรถ้าฉันใช้ซอร์สโปรแกรมจาก stdin