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
fonte
Respostas:
Python , 46 bytes
Experimente online!
Mesmo comprimento:
Uma solução muito mais curta funciona para listas de tamanho par (30 bytes)
Experimente online!
Ainda estou tentando encontrar uma maneira curta de corrigi-lo por comprimentos ímpares.
fonte
f=lambda l:l[1:]and[l[0]+l.pop()]+f(l[1:])or l
também tem o mesmo comprimento ...05AB1E , 5 bytes
Código
Usa a codificação 05AB1E . Experimente online!
Explicação
fonte
Emojicode , 203 bytes
Esta foi a resposta mais dolorosa do Emojicode para codificar para mim. O comprimento desnecessário: /
Experimente online!
fonte
Japonês ,
211816 bytesTeste online!
Completamente horrívelUm pouco menos horrível graças ao @Oliver . BRB depois de implementar mais built-ins e corrigir alguns erros ...fonte
Gaia , 7 bytes
Explicação
fonte
Mathematica, 88 bytes
fonte
Mathematica 57 Bytes
Insere um zero no ponto médio, adiciona a lista ao seu reverso e leva o comprimento apropriado.
fonte
Japonês , 12 bytes
Experimente online! com o
-Q
sinalizador para visualizar a matriz formatada.Solução alternativa, 14 bytes
Experimente online!
fonte
Geléia , 7 bytes
Experimente online!
-2 graças a ETHproductions ... e eu percebendo antes.
fonte
JavaScript (Node.js) , 53 bytes
Experimente online!
Outra sugestão:
JavaScript (Node.js) , 43 bytes
Experimente online!
fonte
R ,
81706857 bytesExperimente online!
função anônima; retorna o resultado.
fonte
Python 3 , 101 bytes
Experimente online!
fonte
Python 3 , 70 bytes
Experimente online!
fonte
JavaScript,
7571 bytesExperimente online
Economizou 2 bytes graças a ETHproductions
fonte
JavaScript (ES6), 41 bytes
Mostrar snippet de código
fonte
MATL , 9 bytes
Experimente online!
Como funciona
Dada uma matriz
[a b c ... x y z]
, vamos[a z]
chamar de sub- matriz "crosta" e[b c ... y z]
"core".O código consiste em um loop que remove a crosta, calcula sua soma e move o núcleo para o topo da pilha, pronto para a próxima iteração. A condição do loop é o número de elementos na sub-matriz principal
fonte
WendyScript , 72 bytes
Experimente online!
fonte
C # (.NET Core) ,
118111 bytesA contagem de bytes também inclui
Experimente online!
Como entrada, use números separados por vírgulas (
,
) ou espaço. Explicação:fonte
Perl,
4238 caracteressub f {@ a = map {$ + pop} emenda @ , 0, @ / 2; @ a, @ }Tente, por exemplo, o seguinte:
fonte
Pitão,
181713 bytesMinha abordagem original foi
-1 byte graças ao Sr. Xcoder
-4 bytes graças a FryAmTheEggman
fonte
c2<list>
para dividir uma lista ao meio. Outro comando que pode ser útil é.T
.WtQ aY+.)Q.(Q0;+Y
C ++ 17,
757371 bytesComo lambda sem nome, aceitar um contêiner como
vector
oulist
retorna com a modificação da entrada:Usando o conhecido operador 'go-to'
<--
e o triple plus+++
Ungolfed e exemplo:
fonte
J , 22 bytes
Experimente online!
fonte
APL (Dyalog Unicode) , SBCS de 21 bytes
-3 bytes graças a @ Adám.
Experimente online!
Explicação:
fonte
+⌿(⌊2÷⍨≢)(↑↑⍮⌽⍤↓)⊢
(⌊2÷⍨≢)(↑{+⌿↑⍺⍵}∘⌽↓)⊢
`Lisp comum, 106 bytes
Experimente online!
fonte
JavaScript (Node.js) , 62 bytes
Experimente online!
fonte
-i-1
por+~i
para salvar um byte.c!=i
comc>i
um byte.Scala, 91 bytes
fonte
Mathematica , 52
fonte
JavaScript (ES6),
4643 bytesMostrar snippet de código
Salvou 3 bytes com inspiração em Asaf .
fonte
c+c
funciona para o terceiro byte.Java 8, 93 bytes
Dois digitos! Este é um lambda que pega um
int[]
e retorna umint[]
.Lambda ungolfed
Bem direto. Dobra a segunda metade no lugar da primeira metade da entrada e retorna uma cópia apenas da primeira metade.
Surpreendentemente, a cópia da matriz na declaração de retorno parece ser a maneira mais barata de lidar com a peculiaridade do elemento final para entradas de tamanho ímpar.
fonte
PHP , 67 bytes
Experimente online!
fonte