Zamierzamy złożyć listę liczb całkowitych. Procedura, aby to zrobić, jest następująca: Jeśli lista ma parzystą długość, zrób listę połowy jej długości, gdzie n-ty element nowej listy jest sumą n-tego elementu starej listy i od n-tego do ostatni element starej listy. Na przykład, gdybyśmy mieli listę
[1 2 3 4 5 6 7 8]
Złożylibyśmy to w ten sposób
[8 7 6 5]
+[1 2 3 4]
__________
[9 9 9 9]
Jeśli lista ma nieparzystą długość, aby ją złożyć, najpierw usuwamy środkowy element, składamy go tak, jakby był parzysty, i dodajemy środkowy element do wyniku.
Na przykład, gdybyśmy mieli listę
[1 2 3 4 5 6 7]
Złożylibyśmy to w ten sposób
[7 6 5]
+[1 2 3]
__________
[8 8 8]
++ [4]
__________
[8 8 8 4]
Zadanie
Napisz program lub funkcję, która pobiera listę liczb całkowitych jako dane wejściowe i wyjściowe, które ta lista jest złożona.
To jest pytanie w golfa kodu, więc odpowiedzi będą oceniane w bajtach, przy czym mniej bajtów będzie lepszych.
Przykładowa implementacja
Oto implementacja w Haskell, która definiuje funkcję, f
która wykonuje fold.
f(a:b@(_:_))=a+last b:f(init b)
f x=x