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 fque executa uma dobra.
f(a:b@(_:_))=a+last b:f(init b)
f x=x