Stiamo per piegare un elenco di numeri interi. La procedura per farlo è la seguente, se l'elenco è di lunghezza pari, crea un elenco della metà della sua lunghezza in cui l'ennesimo elemento del nuovo elenco è la somma dell'ennesimo elemento del vecchio elenco e dall'ennesimo al ultimo elemento del vecchio elenco. Ad esempio se avessimo l'elenco
[1 2 3 4 5 6 7 8]
Vorremmo piegarlo in questo modo
[8 7 6 5]
+[1 2 3 4]
__________
[9 9 9 9]
Se l'elenco ha una lunghezza dispari , per piegarlo rimuoviamo prima l'elemento centrale, piegalo come se fosse pari e aggiungiamo l'elemento centrale al risultato.
Ad esempio se avessimo l'elenco
[1 2 3 4 5 6 7]
Vorremmo piegarlo in questo modo
[7 6 5]
+[1 2 3]
__________
[8 8 8]
++ [4]
__________
[8 8 8 4]
Compito
Scrivi un programma o una funzione che accetta un elenco di numeri interi come input e output che l'elenco è piegato.
Questa è una domanda di code-golf, quindi le risposte verranno classificate in byte, con un numero minore di byte migliori.
Implementazione di esempio
Ecco un'implementazione in Haskell che definisce una funzione f
che esegue una piega.
f(a:b@(_:_))=a+last b:f(init b)
f x=x