Kami akan melipat daftar bilangan bulat. Prosedur untuk melakukannya adalah sebagai berikut, Jika daftar tersebut memiliki panjang genap, buatlah daftar setengah dari panjangnya di mana item ke-n dari daftar baru adalah jumlah dari item ke-n dari daftar lama dan urutan ke-n item terakhir dari daftar lama. Misalnya kalau kita punya daftarnya
[1 2 3 4 5 6 7 8]
Kami akan melipatnya seperti itu
[8 7 6 5]
+[1 2 3 4]
__________
[9 9 9 9]
Jika daftar itu panjangnya aneh , untuk melipatnya pertama-tama kita menghapus item tengah, lipat itu seolah-olah genap dan tambahkan item tengah ke hasilnya.
Misalnya kalau kita punya daftarnya
[1 2 3 4 5 6 7]
Kami akan melipatnya seperti itu
[7 6 5]
+[1 2 3]
__________
[8 8 8]
++ [4]
__________
[8 8 8 4]
Tugas
Tulis program atau fungsi yang mengambil daftar bilangan bulat sebagai input dan output yang dilipat daftar.
Ini adalah pertanyaan kode-golf sehingga jawaban akan dinilai dalam byte, dengan lebih sedikit byte yang lebih baik.
Implementasi sampel
Berikut ini adalah implementasi di Haskell yang mendefinisikan fungsi f
yang melakukan flip.
f(a:b@(_:_))=a+last b:f(init b)
f x=x