Pythเป็นภาษากอล์ฟที่ใช้ Python มันใช้สัญกรณ์คำนำหน้ากับแต่ละคำสั่งที่มี arity ที่แตกต่างกัน (จำนวนอาร์กิวเมนต์ที่ยอมรับ)
งานของคุณคือการเขียนตัวตรวจสอบไวยากรณ์สำหรับภาษา Pyth ที่เหมือนกัน (ไม่มีอยู่) Pith
ไวยากรณ์ของ Pith
Pith มีเพียง 8 คำสั่งถ่านเดียว:
01234()"
01234
แต่ละอันมี arity ของจำนวนที่สอดคล้องกันและด้วยเหตุนี้จึงคาดว่าข้อโต้แย้งมากมายหลังจากนั้น ตัวอย่างเช่น,
400010
เป็นที่ถูกต้องโปรแกรมแก่นเพราะ4
มีผู้ติดตามสี่ข้อโต้แย้ง0
0
0
และ10
สุดท้ายซึ่งเป็นตามด้วยอาร์กิวเมนต์เดียว1
0
เพื่อให้เห็นภาพนี้เราสามารถดูต้นไม้ต่อไปนี้:
R
|
4
|
-------------
| | | |
0 0 0 1
|
0
โดยที่R
โหนดรูท อีกทางเลือกหนึ่งในการคิดเกี่ยวกับสิ่งนี้คือแต่ละหมายเลขหมายถึงจำนวนเด็กที่โหนดที่เกี่ยวข้องมีอยู่ในต้นไม้ด้านบน
นี่คือโปรแกรม Pith ที่ถูกต้องอีกตัวหนึ่งที่มีคำสั่งพื้นฐานมากกว่าหนึ่งคำสั่ง:
210010
สอดคล้องกับ
R
|
-------------
| |
2 1
| |
--------- 0
| |
1 0
|
0
ในทางกลับกัน,
3120102100
คือไม่ได้เป็นโปรแกรมที่ถูกต้องเพราะแก่นเริ่มต้น3
มีเพียงสองข้อโต้แย้งซึ่งเราสามารถดูได้โดยดูที่ต้นไม้ดังต่อไปนี้:
R
|
3
|
------------------------ ??
| |
1 2
| |
2 ------
| | |
------ 1 0
| | |
0 1 0
|
0
ถัดไป(
เริ่มต้นไม่ จำกัด และ)
สิ้นสุดไม่ จำกัด การไม่ จำกัด จำนวนอาร์กิวเมนต์ใด ๆ (อย่างตะกละตะกลาม) และนับเป็นอาร์กิวเมนต์เดียวกับคำสั่งหลักใด ๆ unboundeds ใด ๆ ที่ยังคงเปิดอยู่ในตอนท้ายของโปรแกรมจะถูกปิดโดยอัตโนมัติ )
คำสั่งไม่ได้เป็นข้อผิดพลาดหากไม่มี unboundeds มีการเปิด - มันก็ไม่ทำอะไรเลย *.
ตัวอย่างเช่นโปรแกรม Pith
)31(0)0(201000100
สอดคล้องกับต้นไม้
R
|
3
|
------------------------------
| | |
1 0 (
| |
( -----------------------------
| | | | | |
0 2 0 0 1 0
| |
------- 0
| |
0 1
|
0
ว่างเปล่า unboundeds ก็โอเคดังนั้น()
โปรแกรม Pith ที่ถูกต้อง
โปรแกรม Pith ที่ไม่ถูกต้องพร้อมกับไม่มีข้อ จำกัด คือ
12(010
ตั้งแต่ที่2
ได้รับเพียงหนึ่งอาร์กิวเมนต์ (ไม่ จำกัด )
ในที่สุด"
เริ่มต้นและสิ้นสุดสตริงซึ่งเสมอ 0 arity และนับเป็นอาร์กิวเมนต์เดียวเช่น
2"010""44)()4"
ซึ่งเป็นเพียงแค่2
ถูกส่งผ่านไปสองอาร์กิวเมนต์สตริงและ"010"
"44)()4"
เช่นเดียวกับ unboundeds สตริงอาจว่างเปล่าและสตริงที่ไม่มีการปิดผนึกใด ๆ ในตอนท้ายของโปรแกรมจะถูกปิดโดยอัตโนมัติ
* ส่วนนี้จะแตกต่างจากเดิม Pyth ซึ่งอันที่จริงไม่ทำอะไรบางอย่างในกรณีเช่น1)
สิ้นสุด 1 arity และการสร้างข้อผิดพลาด
อินพุต / เอาต์พุต
ข้อมูลที่ป้อนจะเป็นสตริงที่ไม่ว่างหนึ่งบรรทัดซึ่งประกอบด้วยอักขระ01234()"
เท่านั้น คุณอาจเลือกที่จะสันนิษฐานว่ามีการขึ้นบรรทัดใหม่ที่ต่อท้ายเสมอ คุณสามารถเขียนฟังก์ชั่นหรือโปรแกรมเต็มรูปแบบสำหรับความท้าทายนี้
คุณควรส่งออกค่าความจริงหากอินพุตเป็น Pith ที่ถูกต้องทาง syntactically หรือค่าที่ผิดพลาดเป็นอย่างอื่น ค่าความจริงและเท็จจะต้องได้รับการแก้ไขดังนั้นคุณจึงไม่สามารถส่งออก1
สำหรับโปรแกรมที่ถูกต้องหนึ่งรายการและ2
อีกรายการหนึ่ง
เกณฑ์การให้คะแนน
นี่คือโค้ดกอล์ฟดังนั้นโค้ดในจำนวนไบต์น้อยที่สุดจะเป็นผู้ชนะ
กรณีทดสอบ
Truthy:
0
)
(
"
()
""
10
400010
210010
("")00
3"""""
(0)))0)1)0
2(2(2(0)0)0)0
2"010""44)()4"
)31(0)0(201000100
())2)1))0"3())"))
3("4321("301(0)21100"4")"123"00)40"121"31000""01010
Falsy:
1
1(310
(1)0)
12(010
4"00010"
3120102100
20(2((0)(0)))
2(2(2(0)0)0)01)
4(0102)00)00000
2"00"("00"2(""))
())2)1))0"3())"))
(ซึ่งควรเป็นจริงฉันคิดว่า)
()210""
การใช้งานจำนวนมาก)
[( [2 [0] [1 [0] ] ] [0] [1 [0]] [0] ]
ใช่หรือไม่ สาขาที่คุณมีสาขามี 2, 0, 0, 1 และ 0 - สาขาที่สองไม่ควรอยู่ที่นั่น