Vamos dobrar uma lista de números inteiros. O procedimento para fazer isso é o seguinte: Se a lista tiver tamanho uniforme, faça uma lista com metade do comprimento, onde o enésimo item da nova lista é a soma do enésimo item da lista antiga e do enésimo ao último item da lista antiga. Por exemplo, se tivéssemos a lista
[1 2 3 4 5 6 7 8]
Nós dobraríamos assim
[8 7 6 5]
+[1 2 3 4]
__________
[9 9 9 9]
Se a lista tiver um comprimento ímpar , para dobrá-la, primeiro removemos o item do meio, dobre-o como se fosse par e anexemos o item do meio ao resultado.
Por exemplo, se tivéssemos a lista
[1 2 3 4 5 6 7]
Nós dobraríamos assim
[7 6 5]
+[1 2 3]
__________
[8 8 8]
++ [4]
__________
[8 8 8 4]
Tarefa
Escreva um programa ou função que tenha uma lista de números inteiros como entrada e saídas que listam como dobradas.
Esta é uma questão de código-golfe, para que as respostas sejam pontuadas em bytes, com menos bytes sendo melhores.
Implementação de amostra
Aqui está uma implementação no Haskell que define uma função f
que executa uma dobra.
f(a:b@(_:_))=a+last b:f(init b)
f x=x