Befungeเป็นภาษาโปรแกรมลับสองมิติ แนวคิดพื้นฐานคือคำสั่ง (อักขระหนึ่งตัว) ถูกวางไว้บนกริด 2 มิติ โฟลว์ควบคุมเดินข้ามตารางดำเนินการคำสั่งที่ส่งผ่านและเปลี่ยนทิศทางเมื่อกระทบกับลูกศร ( >^<v
) คำสั่งเป็นแบบสแต็ก ดูรายการนี้ ดูเพิ่มเติมhttp://esolangs.org/wiki/Befunge
ข้อมูลจำเพาะสำหรับ Befunge-98มีให้บริการ
ปัญหา
เขียนโปรแกรมที่แปลงโปรแกรม Befunge เป็นรูปแบบที่กะทัดรัดยิ่งขึ้น ตัวอย่างเช่นโปรแกรมต่อไปนี้จะพิมพ์0
:
> 0 v
> @ .
^ <
ในกรณีนี้มันสามารถบีบอัดได้โดยไม่ต้องเปลี่ยนพฤติกรรมของโปรแกรมโดยการลบแถวของช่องว่างเพื่อให้
>0v
>@.
^ <
การแปลงซับซ้อนมากขึ้นสามารถหมุนหรือเรียงลำดับคำสั่งของมิเรอร์และกำจัดคำสั่งควบคุมโฟลว์ที่ไม่จำเป็นเพื่อให้โปรแกรมมีขนาดกะทัดรัด ตัวอย่างเช่นด้วยโปรแกรมนี้:
>12345v
6
v....7<
.
.
.
@
คุณอาจปิดท้ายโปรแกรมเข้าไปในรู:
>12345v
>...@ 6
^....7<
สำหรับตัวอย่างแรกโปรแกรมขนาดกะทัดรัดที่สุดที่เป็นไปได้คือ
>0.@
คุณสามารถใช้การแปลงใด ๆ ตราบใดที่โปรแกรมเอาต์พุตให้ผลลัพธ์เหมือนกัน
โปรแกรมอินพุต
โปรแกรมอินพุตเป็นโปรแกรม Befunge-98 ที่ถูกต้อง
คุณอาจคิดว่าโปรแกรมอินพุตนั้นถูกกำหนดไว้แล้ว นั่นคือมันไม่ได้ใช้คำสั่งที่อ่านสถานะภายนอก: คำสั่งที่ผู้ใช้ป้อนข้อมูล&
และ~
, randomizer ?
และตนเองปรับเปลี่ยนคำสั่งรหัสและp
g
คุณอาจจะสมมติว่าโปรแกรมอินพุตสิ้นสุดลง
เกณฑ์การให้คะแนน
นี่ไม่ใช่การเขียนโค้ด แต่เป็นปัญหาในการเขียนโปรแกรมที่ทำการตีกอล์ฟ
อินพุตเป็นชุดกรณีทดสอบ (โปรแกรม Befunge ที่ตรงตามข้อ จำกัด การป้อนข้อมูลด้านบน) คะแนนรวมคือผลรวมของคะแนนสำหรับกรณีทดสอบ
คะแนนสำหรับแต่ละกรณีทดสอบ
คะแนนเป็นพื้นที่ของตัวเรือนูนของเซลล์ที่ไม่ว่างเปล่าในโปรแกรมเอาท์พุทซึ่งแต่ละเซลล์จะได้รับการปฏิบัติเสมือนเป็นสี่เหลี่ยมจัตุรัสซึ่งทั้งสี่มุมนั้นเป็นจุดขัดแตะในระนาบคาร์ทีเซียน ตัวอย่างเช่นโปรแกรมของ
> v
@ <
ได้รับคะแนน 9.5
หากโปรแกรมของคุณไม่ยุติในเวลาและหน่วยความจำที่เหมาะสมในอินพุตที่ระบุคะแนนจะเป็นของโปรแกรมอินพุต (นี่เป็นเพราะคุณสามารถเพิ่ม wrapper การ จำกัด เวลาซึ่งส่งผลให้โปรแกรมอินพุตไม่เปลี่ยนแปลงหากโปรแกรมของคุณไม่สิ้นสุดในเวลา)
หากโปรแกรมกรณีทดสอบมีผลลัพธ์ที่แตกต่างกัน (หรือล้มเหลวในการยกเลิก) หลังจากประมวลผลกับโปรแกรมของคุณคะแนนคือคะแนนของโปรแกรมอินพุตบวกกับการลงโทษ 100 คะแนน
.
หมายถึงจำนวนเต็มเอาต์พุต แต่ถ้าคุณเริ่มจากด้านบนซ้ายแสดงว่าไม่มีจำนวนเต็มในสแต็กไปยังเอาต์พุต
.
ส่งออกจำนวนเต็ม แต่ยังเมื่อมีพารามิเตอร์ไม่เพียงพอในสแต็ก befunge อ้างว่ามีจำนวนศูนย์ที่เพียงพอแทน 000
ดังนั้นตัวอย่างที่สองจะเอาท์พุท
g
และp
ไม่ได้รับอนุญาต (ขออภัยลืมเกี่ยวกับสิ่งเหล่านี้; แก้ไข)