เรากำลังจะพับลิสต์ของจำนวนเต็ม ขั้นตอนที่ต้องทำมีดังต่อไปนี้หากรายการมีความยาวเท่ากันให้ทำรายการครึ่งหนึ่งของความยาวโดยที่รายการที่ n ของรายการใหม่คือผลรวมของรายการที่ n ของรายการเก่าและ nth-to- รายการสุดท้ายของรายการเก่า ตัวอย่างเช่นถ้าเรามีรายการ
[1 2 3 4 5 6 7 8]
เราจะพับมันอย่างนั้น
[8 7 6 5]
+[1 2 3 4]
__________
[9 9 9 9]
หากรายการมีความยาวคี่ในการพับเราจะลบรายการกลางก่อนพับมันราวกับว่ามันเป็นคู่และผนวกรายการกลางเพื่อผล
ตัวอย่างเช่นถ้าเรามีรายการ
[1 2 3 4 5 6 7]
เราจะพับมันอย่างนั้น
[7 6 5]
+[1 2 3]
__________
[8 8 8]
++ [4]
__________
[8 8 8 4]
งาน
เขียนโปรแกรมหรือฟังก์ชั่นที่รับรายการจำนวนเต็มเป็นอินพุตและเอาต์พุตที่รายการถูกพับ
นี่เป็นคำถามเกี่ยวกับการเขียนโค้ดดังนั้นคำตอบจะได้คะแนนเป็นไบต์โดยมีจำนวนไบต์น้อยกว่าดีกว่า
การใช้งานตัวอย่าง
นี่คือการใช้งานใน Haskell ที่กำหนดฟังก์ชั่นf
ที่ทำหน้าที่พับครึ่ง
f(a:b@(_:_))=a+last b:f(init b)
f x=x