ในการท้าทายนี้คุณจะต้องแยกวิเคราะห์รายการเป็นรูปแบบรายการที่ง่ายขึ้น
ความท้าทายนี้ขึ้นอยู่กับตัวแยกวิเคราะห์เศร้าของฉัน ในตัวแยกวิเคราะห์ sadflak ของฉันมีการลบทั้งหมด () แทนที่ด้วยผลรวมของ () ที่จุดเริ่มต้นของรายการเพื่อให้โปรแกรมทำงานได้เร็วขึ้น
ในการแยกวิเคราะห์ไปยัง Sad-List คุณต้องทำสิ่งนี้ (การใช้ python ใช้ tuple ของ tuples):
def sadlistfunc(list):
new-sadlist = [0]
for i in list:
if i == ():
new-sadlist[0]+=1
else:
new-sadlist.append(sadlistfunc(i))
นี่คือฟังก์ชั่นวนซ้ำ สำหรับรายการให้เริ่มต้นรายการใหม่เริ่มต้นด้วยจำนวน () จากรายการอินพุตจากนั้นส่วนที่เหลือของรายการนี้คือรุ่นเศร้ารายการของทุกรายการที่ไม่ใช่ () จากอินพุตรายการตามลำดับ ส่งคืนรายการ
การป้อนข้อมูล:
คุณสามารถป้อนข้อมูลในรูปแบบที่แตกต่างกันไม่กี่:
- คุณอาจใช้มันเป็นรายการ
- คุณอาจใช้มันเป็นสิ่งอันดับ
- คุณอาจใช้มันเป็นสตริง
ถ้าคุณคิดว่ามันเป็นสตริงคุณควรใช้วงเล็บบางอันตามที่ปรากฎในสมอง คุณไม่สามารถใช้อักขระ 1 และ 2
เพียงแค่มีเหตุผล
ข้อมูลเข้าจะอยู่ในรายการเดียว แต่โปรแกรมของคุณอาจสมมติว่าเป็นรายการเลเยอร์โดยนัยนอกอินพุตเช่น () () () () = (() () ()) หรืออาจเลือกที่จะไม่ทำ ตัวอย่างจะอยู่ในรายการนอกอย่างชัดเจน
เอาท์พุท:
อาจเป็น list หรือ tuple หรือ string หรืออะไรก็ตาม คุณสามารถใช้รูปแบบผลลัพธ์ที่สมเหตุสมผลเช่นเดียวกับฉันทามติเมตา
ตัวอย่าง:
(()()()) = [3]
(((()))) = [0,[0,[1]]]
((())()(())) = [1, [1], [1]]
() = invalid input, if the outside bracket is explicit.
((((())())())(())()) = [1, [1, [1, [1]]], [1]]
โปรดทราบว่าการป้อนข้อมูลไม่เข้มงวด อินพุตเหล่านี้อาจเป็น:
[[],[],[]]
[[[[]]]]
[[[]],[],[[]]]
[]
[[[[[]],[]],[]],[[]],[]]
หรือรูปแบบที่เหมาะสมอื่น ๆ
อธิบายกรณีทดสอบ:
(()()((())())())
ถึง "sadify" สิ่งนี้ก่อนอื่นเราต้องนับจำนวน ()
()() ()
( ((())()) )
3. จากนั้นเราจะลบสิ่งเหล่านี้และเพิ่ม 3 ตอนเริ่มต้น
(3,((())()))
มีหนึ่งรายการในรายการนี้ เราทำให้สิ่งนี้เศร้า
((())())
เท่าไหร่ ()?
()
((()) )
1. เราลบและเพิ่ม 1 เมื่อเริ่มต้น
(1,(()))
มีหนึ่งรายการในนั้น
(())
นับ
()
( )
ลบและเพิ่มจำนวน
(1)
จากนั้นเราใส่กลับเข้าไปในรายการ
(1,(1))
จากนั้นเราใส่กลับเข้าไปในรายการ
(3,(1,(1)))
เสร็จแล้ว
นี่คือรหัสกอล์ฟที่สั้นกว่าดีกว่า
((((())())())(())()) = [1, [1, [1, [1]], [1]]
((((())())())(())()) = [1, [1, [1, [1]]], [1]]