พีระมิดเป็นภาษาที่ถูกพัฒนาโดย@ ConorO'Brien ใน Pyramid Scheme โค้ดที่คุณเขียนมีลักษณะดังนี้:
^ ^
/ \ /3\
/ \ ---
/ + \
^-------^
/9\ /3\
/123\ ---
-----
ตอนนี้รหัสนั้นมีคุณสมบัติที่ชัดเจนสองประการ: มันยากที่จะแยกวิเคราะห์และยากที่จะเขียน Conor ได้แก้ไขปัญหาแรกแล้วอย่างไรก็ตามงานของคุณคือการแก้ไขปัญหาที่สอง
โค้ดด้านบนนั้นประมวลผลโดยตัวแปล PyramidScheme ไปเป็นอาร์เรย์สตริงที่ซ้อนกันเช่นนี้
[["+", ["9123", "3"]], "3"]
งานของคุณคือการเขียนโปรแกรมหรือฟังก์ชั่นซึ่งกำหนดสตริงที่ซ้อนกันเอาต์พุตหรือส่งคืนรหัส PyramidScheme ที่สร้างขึ้นใหม่ คุณอาจคิดว่าอาร์เรย์อินพุตจะใช้ได้เสมอ
ปิรามิดเป็นสามเหลี่ยมหน้าจั่ว ด้านบนเป็น^
ที่ลาดชันด้านแนวทแยงมุมไปด้วย/
และและด้านล่างเป็น\
-
มุมด้านล่างทั้งสองว่างเปล่าหรือมีจุดเริ่มต้นของปิรามิดอื่นซึ่งเป็นข้อโต้แย้ง ตรงกลางเต็มไปด้วยชื่อของปิรามิดโดยไม่สนใจการแบ่งบรรทัด
นี่คือวิธีที่ parser แปลงรหัสเป็นรูปแบบที่ใช้งานได้ ก่อนอื่นมันจะตรวจหาปิรามิดระดับบนสุด หากไม่มีข้อโต้แย้งมันจะแสดงถึงมันด้วยสตริงเดียวและย้ายไป มิฉะนั้นมันหมายถึงเป็นอาร์เรย์หรือ["name",[arg1,arg2]]
["name",[arg1]]
อาร์กิวเมนต์คือปิรามิดที่ด้านล่างซ้ายและขวาล่างของปิรามิดซึ่งอาจเป็นสตริงหรือมากกว่านั้นที่อธิบายไว้ข้างต้น คุณอาจสังเกตเห็นว่าสิ่งนี้ค่อนข้างคล้ายกับ Lisp ซึ่งในกรณีนี้คุณอาจสังเกตเห็นปุนอันยิ่งใหญ่ที่เป็นชื่อภาษา หลังจากปิรามิดแสดงเสร็จแล้วตัวแยกวิเคราะห์จะเลื่อนไปยังอีกอันหนึ่ง
นี่คือรหัส - กอล์ฟรหัสที่สั้นที่สุดชนะ!
กรณีทดสอบ: สิ่งเหล่านี้ไม่ได้เป็นเพียงผลลัพธ์ที่ถูกต้องเท่านั้น แต่เป็นตัวอย่างของผลลัพธ์ที่ถูกต้อง
[["+", ["9123", "3"]], "3"]
^ ^
/ \ /3\
/ \ ---
/ + \
^-------^
/9\ /3\
/123\ ---
-----
[["out", [["chr", ["72"]], ["chr", ["101"]]]], ["out", [["chr", ["108"]]]], ["out", [["chr", ["108"]]]], ["out", [["chr", ["111"]]]]]
^ ^ ^ ^
/ \ / \ / \ / \
/out\ /out\ /out\ /out\
^-----^ -----^----- -----^
/ \ / \ / \ / \
/chr\ /chr\ /chr\ /chr\
^----- -----^ -----^ ^-----
/ \ / \ / \ / \
/72 \ /101\ /108\ /111\
----- ----- ----- -----
[ ["+", [ ["asdfghjkl"], ["do", [ "1" ]] ]] ]
^
/ \
/ + \
/ \
^-------^
/a\ /d\
/sdf\ /o \
/ghjkl\ ^-----
-------/1\
---
สังเกตเห็นในกรณีทดสอบที่สองout
พีระมิดที่สองและสามนั้น["chr", ["108"]]
มีพารามิเตอร์ซึ่งถูกยุบลงในสแต็กปิรามิดหนึ่งที่แบ่งใช้โดยสองระดับบนสุด นี่คือการเพิ่มประสิทธิภาพที่ถูกต้องรหัสของคุณอาจสนับสนุน แต่มันเป็นตัวเลือกที่สมบูรณ์; การให้คะแนนไม่ได้ขึ้นอยู่กับความยาวของผลลัพธ์ของคุณ
สำหรับกรณีที่อยากรู้อยากเห็นกรณีแรกจะแสดง9126 3
เนื่องจากการพิมพ์โดยนัยของปิรามิดระดับบนสุดที่สองพิมพ์Hello
และคนสุดท้ายคือข้อผิดพลาดทางไวยากรณ์รวมเพียงเพราะมันมีโครงสร้างที่เรียบร้อย
คุณอาจจะคิดว่าการป้อนข้อมูลที่มีเพียง ASCII พิมพ์ไม่รวมช่องว่าง^
, /
, และ\
-
ข้อมูลที่ป้อนจะถูกต้องเสมอและมีอย่างน้อยหนึ่งปิรามิด ไม่มีการ จำกัด ขนาดของอาเรย์หรือสตริงการป้อนข้อมูลอย่างไรก็ตามคุณอาจเขียนโค้ดของคุณราวกับว่าประเภทจำนวนเต็มเริ่มต้นของภาษานั้นมีความแม่นยำไม่สิ้นสุดและคอมพิวเตอร์ของคุณมีหน่วยความจำตามอำเภอใจ หากการป้อนข้อมูลเป็นสตริงเดียวคุณอาจใช้สิ่งใดที่สมเหตุสมผล (คอมม่าเว้นวรรค ฯลฯ ตราบใดที่มันอยู่ใน ascii ที่พิมพ์ได้และไม่ใช่"
หรือ[]
) เพื่อกำหนดขอบเขตอาร์เรย์ คุณไม่จำเป็นต้องใส่วงเล็บล้อมรอบสิ่งทั้งปวงและใช้อาร์เรย์หลาย ๆ ตัวคั่นด้วยตัวคั่นของคุณ
ผลลัพธ์ของคุณไม่จำเป็นต้องถูกตีกอล์ฟคุณสามารถแทรกพื้นที่เพิ่มเติมหรือทำให้ปิรามิดของคุณใหญ่เกินความจำเป็น ปิรามิด Toplevel ควรอยู่ในบรรทัดแรก เอาต์พุตควรเป็นสตริงที่มีบรรทัดใหม่หรือรายการสตริง
ใครก็ตามที่ไม่รวมถึงรุ่นของรหัสของพวกเขาที่ดีที่สุด Golfs ปิรามิดที่อาจได้รับตัวแทนบางส่วนในรูปแบบของ upvotes / โปรดปราน ( แต่อาจจะเพียงแค่ upvotes)