ในการเขียนโปรแกรมภาษาลึกลับหยิกโปรแกรม แต่เพียงการประกอบวงเล็บปีกกาและอัฒภาค{}
;
แม้ชุดเครื่องมือต่ำต้อยนี้ลอนมีตัวอักษรที่สามารถแสดงจำนวนเต็มที่ไม่ใช่ค่าลบใด ๆ รูปแบบนั้นค่อนข้างยากสำหรับผู้ที่ไม่ได้ฝึกอ่านดังนั้นให้เขียนโค้ดเพื่อทำการแปลงให้เรา
รูปแบบของตัวเลข
ตัวเลขลอนมีโครงสร้างตามกฎต่อไปนี้:
- การเพิ่มเซมิโคลอนเพิ่มหนึ่งหมายเลข
- จำนวนที่อยู่ในเครื่องหมายปีกกาจะถูกคูณด้วยสี่
- กลุ่มที่มีรั้งเป็นลอนอาจซ้อนกัน แต่ไม่ได้ต่อกัน เครื่องมือจัดฟันต้องตรงกันอย่างถูกต้อง
- เครื่องหมายอัฒภาคนอกชุดเครื่องหมายปีกกาจะต้องมาหลังจากนั้นไม่ใช่มาก่อน
- เพื่อหลีกเลี่ยงความคลุมเครือในการแยกวิเคราะห์ตัวเลขต้องเริ่มต้นด้วยวงเล็บปีกกาเสมอ
ตัวอย่างบางส่วน:
{;;} 2*4 = 8
{{;};}; (1*4+1)*4+1 = 21
{};;; 0*4+3 = 3
(โปรดทราบว่ากฎ 5 หมายถึงตัวเลข 0 ถึง 3 จะต้องเริ่มต้นด้วยวงเล็บปีกกาว่างเปล่าคู่)
และตัวอย่างที่ไม่ถูกต้อง:
{{;}{;;}} Curly brace groups side-by-side, not nested
{;}} Unmatched brace
{;{;}} Semicolon before curly-brace group
;;; Number does not start with curly brace
นี่คือไวยากรณ์ BNF สำหรับหมายเลขลอน:
<number> ::= "{" <inner> "}" <semis>
<inner> ::= <semis>
| <number>
<semis> ::= ";" <semis>
| ""
ตัวเลขเช่น{;;;;}
(มากกว่า 3 อัฒภาคในแถว) หรือ{{};}
(กลุ่มวงเล็บปีกกาว่างเปล่าที่ไม่จำเป็น) เรียกว่าหมายเลขลอนที่ไม่เหมาะสม พวกเขาเชื่อฟังไวยากรณ์ข้างต้นและสามารถประเมินได้ในวิธีปกติ แต่พวกเขาก็ยังสามารถเป็นตัวแทนที่สั้นกว่า (สำหรับตัวอย่างข้างต้น{{;}}
และ{;}
ตามลำดับ)
ความท้าทาย
เขียนโปรแกรมหรือฟังก์ชั่นที่อินพุต / รับสตริง หากสตริงเป็นจำนวนเต็มฐานสิบที่ไม่ใช่ค่าลบเอาต์พุต / ส่งกลับค่าที่เหมาะสม (นั่นคือสั้นที่สุด) การเป็นตัวแทนลอนสำหรับจำนวนเต็มนั้น ถ้าสตริงเป็นจำนวนลอนผลลัพธ์ / ส่งกลับแทนทศนิยม
สามารถรับอินพุตได้ผ่าน STDIN อาร์กิวเมนต์บรรทัดคำสั่งหรือพารามิเตอร์ฟังก์ชัน มันต้องเป็นสตริง นั่นคือคุณไม่สามารถเขียนฟังก์ชั่นที่ยอมรับสตริงสำหรับตัวเลขหยิก แต่จำนวนเต็มสำหรับตัวเลขทศนิยม
สามารถพิมพ์เอาต์พุตไปที่ STDOUT หรือส่งคืนจากฟังก์ชัน ฟังก์ชั่นอาจคืนค่าจำนวนเต็มเมื่อเหมาะสมหรืออาจส่งคืนสตริงในทุกสถานการณ์
โปรแกรมของคุณไม่จำเป็นต้องจัดการอินพุตที่ไม่ถูกต้อง (ตัวเลขหยิกที่ละเมิดกฎการจัดรูปแบบหมายเลขทศนิยมจำนวนเต็มลบข้อความสุ่ม) และไม่จำเป็นต้องจัดการกับตัวเลขหยิกที่ไม่เหมาะสม (แต่ดูด้านล่าง) ข้อมูลที่ป้อนจะประกอบด้วยอักขระ ASCII ที่พิมพ์ได้เท่านั้น
เกณฑ์การให้คะแนน
รหัสที่สั้นที่สุดในหน่วยไบต์ชนะ หากโปรแกรมของคุณสามารถทำทั้งสองอย่างต่อไปนี้:
- จัดการหมายเลขลอนที่ไม่เหมาะสมและ
- เมื่อได้รับจำนวนหยิกให้ละเว้นอักขระพิเศษใด ๆ ที่ไม่ใช่
{};
จากนั้นลบ 10% จากคะแนนของคุณ (การป้อนค่าจำนวนเต็มจะไม่มีอักขระที่ไม่เกี่ยวข้องแม้แต่กับโบนัส)
กรณีทดสอบ
Input Output
{;;} 8
{{;};}; 21
{};;; 3
{{{{;}}};} 260
{} 0
4 {;}
17 {{;}};
1 {};
0 {}
96 {{{;};;}}
สำหรับโบนัส:
{};;;;; 5
{{;;;;};;} 72
c{u;r;l}y;! 9
42{;} ;;;; 8
หมายเหตุ: ลอนยังไม่ได้ใช้งาน แต่ถ้าคำถามนี้ทำได้ดีฉันอาจจะพัฒนาต่อไป