Chúng tôi sẽ gấp một danh sách các số nguyên. Quy trình thực hiện như sau, Nếu danh sách có độ dài chẵn, hãy lập danh sách một nửa chiều dài của nó trong đó mục thứ n của danh sách mới là tổng của mục thứ n của danh sách cũ và thứ n đến mục cuối cùng của danh sách cũ. Ví dụ: nếu chúng tôi có danh sách
[1 2 3 4 5 6 7 8]
Chúng tôi sẽ gấp nó như vậy
[8 7 6 5]
+[1 2 3 4]
__________
[9 9 9 9]
Nếu danh sách có độ dài lẻ , để gấp nó, trước tiên chúng ta xóa mục ở giữa, gấp nó lại như thể nó là chẵn và nối thêm mục giữa vào kết quả.
Ví dụ: nếu chúng tôi có danh sách
[1 2 3 4 5 6 7]
Chúng tôi sẽ gấp nó như vậy
[7 6 5]
+[1 2 3]
__________
[8 8 8]
++ [4]
__________
[8 8 8 4]
Bài tập
Viết chương trình hoặc hàm lấy danh sách các số nguyên làm đầu vào và đầu ra mà danh sách được gấp lại.
Đây là một câu hỏi golf-code vì vậy câu trả lời sẽ được tính bằng byte, với ít byte hơn sẽ tốt hơn.
Mẫu thực hiện
Đây là một triển khai trong Haskell xác định chức năng f
thực hiện một nếp gấp.
f(a:b@(_:_))=a+last b:f(init b)
f x=x