Pyth เป็นภาษาการเล่นกอล์ฟทั่วไปที่ประสบความสำเร็จมากที่สุด แม้ว่าจะค่อนข้างลดลงเนื่องจากภาษาใหม่กว่าจากปี 2014 ถึง 2016 ไวยากรณ์ที่รัดกุมของ Pyth, การอัปเดตอย่างต่อเนื่อง, การบรรทุกเกินพิกัดและ (สำหรับยุคของมัน) ตัวสร้างจำนวนมากทำให้เป็นที่ชื่นชอบสำหรับคำถามส่วนใหญ่
รหัส Pyth มักจะอ่านยาก แม้เอาต์พุตของโหมดดีบัก (transpiled Python) มักจะประกอบด้วยบรรทัดยาวบางครั้งมีวงเล็บซ้อนกันสิบลึก อย่างไรก็ตามการจัดรูปแบบ Pyth ในรูปแบบที่ถูกต้องสามารถอ่านได้มาก
นี่เป็นชิ้นส่วนของรหัส Pyth เขียนโดย @isaacg ในการเล่นห่วงโซ่ของ Word
.MlZfqhMtTeMPT+Lzs.pMyQ
มันอ่านง่ายกว่านี้มาก
.M Filter by gives-maximal-value of
l Z lambda Z:length(Z) over
f filter by (lambda T:
q equal
hM t T head-map tail T
eM P T end-map Pop T)
+L Append z to each element in
z
s .pM y Q flattened permutations of each subset of Q
สำหรับความท้าทายนี้เราจะกำจัดความซับซ้อนของkolmogorovในการจัดหมวดหมู่อักขระPythและมุ่งเน้นที่การจัดรูปแบบ แทนที่จะเป็นรหัส Pyth 0123456789M
ใส่จะประกอบด้วยตัวละครใน ตัวเลขn
แสดงถึงฟังก์ชันของ arity n
และM
แสดงถึงโอเปอเรเตอร์ 210221M101M102M011M10
ยกตัวอย่างเช่นโค้ดข้างต้นจะแสดงเป็น นี่คือขั้นตอนในการลดขนาด:
แยกสตริงออกเป็นโทเค็น
[0-9]M*
ตรงกับโทเค็น 0M
จะไม่เกิดขึ้นในอินพุต
เพิ่ม 0 ต่อท้าย
เมื่อมีข้อโต้แย้งไม่เพียงพอ Pyth จะผนวกตัวแปรโดยนัย (ตัวแปรแลมบ์ดาหรือหลายตัวแปรQ
) เข้ากับโค้ดเท่าที่จำเป็นเพื่อเติมอาร์กิวเมนต์ของโปรแกรม สิ่งเหล่านี้ควรถูกแทนด้วย0
s
กลุ่มโทเค็นเป็นเส้น
โทเค็น arity คือค่าตัวเลข
โทเค็น arity-0 (เช่น a 0) ลงท้ายด้วยบรรทัด
สำหรับโทเค็น arity-1 โทเค็นถัดไปควรอยู่ในบรรทัดเดียวกันคั่นด้วยช่องว่าง
สำหรับ arity> = 2 โทเค็นอาร์กิวเมนต์ของมันจะอยู่ในบรรทัดแยกตามลำดับที่ปรากฏในโค้ดแต่ละรายการตามด้วยอาร์กิวเมนต์ย่อยของตนเองและอื่น ๆ อาร์กิวเมนต์ของโทเค็นจะถูกเยื้องไปยังจุดสิ้นสุดของโทเค็นนั้นบวกหนึ่งช่องว่าง
อินพุต
สตริงว่าง (หรือแถวถ่านอาร์เรย์ของความยาว-1 สตริง ฯลฯ ได้รับอนุญาตโดยวิธีการมาตรฐาน I / O) ประกอบด้วยซึ่งจะไม่ประกอบด้วยอักขระย่อย0123456789M
0M
เอาท์พุต
สตริงที่จัดรูปแบบตามกฎข้างต้น
กรณีทดสอบ
210221M101M102M011M10
2
1 0
2
2
1M 1 0
1M 1 0
2M
0
1 1M 1 0
123M4M
1 2
3M
4M
0
0
0
0
0
0
0
2MM
2MM
0
0
11011100
1 1 0
1 1 1 0
0
9000000
9
0
0
0
0
0
0
0
0
0
210221M101M102M011M10
จะเป็น[2,1,0,2,2,1,'M',1,0,1,'M',1,0,2,'M',0,1,1,'M',1,0]
M
อนุญาตให้เป็นประเภทข้อมูลที่แตกต่างจากจำนวนเต็ม
M
?