ลักษณะ
จินตภาพการเขียนโปรแกรมภาษา (IPL) ใช้สัญลักษณ์ย้อนกลับโปแลนด์ มันมีคำสั่งดังต่อไปนี้:
- i - ใส่หมายเลขแล้วดันไปที่สแต็ก
- o - เอาท์พุทแบบไม่ทำลายด้านบนของสแต็ค (จำนวนยังคงอยู่บนสแต็ก)
- d - ยกเลิกด้านบนสุดของสแต็ก
- จำนวนเต็ม - กดตัวเลขนี้ไปที่สแต็ก
- + - * - ป๊อปอัพตัวเลขสองตัวจากสแต็คดำเนินการที่สอดคล้องกันและผลักดันผลลัพธ์ ไม่มีการแบ่งใน IPL
IPL ทำงานได้เฉพาะกับจำนวนเต็มและใช้สำหรับการคำนวณอย่างง่าย โปรแกรม IPL ถูกเขียนบนหนึ่งบรรทัดและคั่นด้วยช่องว่าง สตริงว่างเปล่าเป็นโปรแกรม IPL ที่ถูกต้อง
โปรแกรม IPL:
i i + o
ใส่ตัวเลขสองตัวเพิ่มเข้าด้วยกันแล้วส่งผลลัพธ์
จำนวนอินพุตและจำนวนเต็มที่สามารถพุชไปยังสแต็กนั้นอยู่ในช่วง [-999, 999] แต่เอาต์พุตสามารถมีได้ หากภาษาของคุณไม่รองรับตัวเลขขนาดใหญ่ก็ถือว่าใช้ได้
รูปแบบอินพุต / เอาต์พุต
คุณสามารถเลือกรูปแบบอินพุต / เอาท์พุตใดก็ได้ตราบใดที่ชัดเจนในการทำความเข้าใจและอ่าน / เขียน: สตริง, รายการ, โทเค็น ฯลฯ
งาน
คุณได้รับโปรแกรม IPL บางตัวคุณต้องปรับให้เหมาะสม (ลดความยาว):
i 12 + 3 + o d 2 3 + d
หลังจากการเพิ่มประสิทธิภาพจะกลายเป็น
i 15 + o
คุณไม่จำเป็นต้องรักษาสถานะสแต็ก แต่จำนวนอินพุตและเอาต์พุตและคำสั่งซื้อควรตรงกับโปรแกรมดั้งเดิมและที่ปรับให้เหมาะสม
ดังนั้นโปรแกรม IPL:
-40 i * 2 * o i + 3 1 + o i 2 *
หลังจากการเพิ่มประสิทธิภาพจะกลายเป็น
i -80 * o i 4 o i
หรือ
-80 i * o i 4 o i
(โปรดทราบว่าคุณต้องบันทึกอินพุตทั้งหมดแม้ว่าจะไม่เกี่ยวข้องก็ตาม)
ไม่ควรมีการเข้ารหัสฮาร์ดโค้ดสำหรับกรณีทดสอบรหัสควรทำงานกับโปรแกรม IPL ใด ๆ และสร้างโปรแกรม IPL ที่สั้นที่สุดที่เป็นไปได้ที่ตรงตามข้อกำหนด
เกณฑ์การให้คะแนน
การให้คะแนนโค้ดกอล์ฟเริ่มต้น
UPDATE: เปลี่ยนการให้คะแนนเป็นการให้คะแนนโค้ดกอล์ฟแบบบริสุทธิ์ตามคำแนะนำ @Sanchises
กรณีทดสอบ:
การป้อนข้อมูล:
(empty string)
เอาต์พุตที่เป็นไปได้:
(empty string)
การป้อนข้อมูล:
i 4 * 2 + 3 * 6 - o
เอาต์พุตที่เป็นไปได้:
i 12 * o
การป้อนข้อมูล:
1 1 + o
เอาต์พุตที่เป็นไปได้:
2 o
การป้อนข้อมูล:
i 2 + 3 + o d 2 3 + d
เอาต์พุตที่เป็นไปได้:
i 5 + o
การป้อนข้อมูล:
-40 i * 2 * o i + 3 1 + o i 2 *
เอาต์พุตที่เป็นไปได้:
-80 i * o i 4 o i
การป้อนข้อมูล:
i i 1 + i 1 + i 1 + i 1 + d d d d o
เอาต์พุตที่เป็นไปได้:
i i i i i d d d d o
การป้อนข้อมูล:
i i i 0 * * * o
เอาต์พุตที่เป็นไปได้:
i i i 0 o
การป้อนข้อมูล:
i i i 1 * * * o
เอาต์พุตที่เป็นไปได้:
i i i * * o
การป้อนข้อมูล:
i 222 + i 222 - + o
เอาต์พุตที่เป็นไปได้:
i i + o
การป้อนข้อมูล:
i 2 + 3 * 2 + 3 * 2 + 3 * i * d i 2 + 3 * i + d i o 2 + 2 - 0 * 1 o
เอาต์พุตที่เป็นไปได้:
i i i i i o 1 o
การป้อนข้อมูล:
i 1 + 2 * 1 + o
เอาต์พุตที่เป็นไปได้:
i 2 * 3 + o
การป้อนข้อมูล:
1 1 + o i 2 + 3 + o d 2 3 + d 4 i * 2 * o i + 3 1 + o i 2 * i i 1 + i 1 + i 1 + i 1 + d d d d o i i i 0 * * * o i i i 1 * * * o i 2 + i 2 - + o i 2 + 3 * 2 + 3 * 2 + 3 * i * d i 2 + 3 * i + d i o 2 + 2 - 0 * 1 o
เอาต์พุตที่เป็นไปได้:
2 o i 5 + o 8 i * o i 4 o i i i i i i d d d d o i i i 0 o i i i * * * o i i + o i i i i i o 1 o
i i d o
การi o i
(การป้อนข้อมูลที่อยู่ในการสั่งซื้อและการส่งออกที่อยู่ในลำดับ) หรือคุณไม่ควรลดความซับซ้อนของมันได้หรือไม่ (ชุดอินพุตและเอาต์พุตควรเป็นไปตามลำดับ)