Hoje, seu desafio é pegar uma matriz, dividi-la em partes e adicioná-las.
Eis como isso funciona: Seu programa ou função receberá uma matriz de números inteiros a
e um tamanho de bloco L
. A matriz deve ser dividida em matrizes de tamanho L
, se o comprimento da matriz não for divisível até L
então, a matriz deve ter 0's anexados a ela, para que seja igualmente divisível. Depois que a matriz é dividida em partes, todas as partes devem ser adicionadas em elementos. A matriz resultante é então emitida.
Você pode assumir que L
é maior que 0 e que a
não é vazio. Você não pode assumir que a
o conteúdo é positivo.
Aqui está um exemplo:
[1,2,3,4,5,6,7,8], 3 => [1,2,3]+[4,5,6]+[7,8,0] => [1+4+7,2+5+8,3+6+0] => [12,15,9]
Casos de teste:
Array Length Output
[1] 1 [1]
[1] 3 [1,0,0]
[0] 3 [0,0,0]
[1,2] 3 [1,2,0]
[1,2] 1 [3]
[-1,1] 2 [-1,1]
[-7,4,-12,1,5,-3,12,0,14,-2] 4 [12,-1,0,1]
[1,2,3,4,5,6,7,8,9] 3 [12,15,18]
Isso é código-golfe , o menor número de bytes vence!
code-golf
array-manipulation
Pavel
fonte
fonte
Respostas:
MATL , 4 bytes
Experimente online!
Primeiro bit do código MATL que escrevi! Recebe duas entradas,
a
como um vetor de linha (separado por vírgula) el
como um número. Funciona para serfonte
Python 3 ,
676542 bytesUsa o fato de que a soma de uma matriz vazia é 0
Experimente online!
fonte
Geléia ,
76 bytes1 byte graças a Dennis.
Experimente online!
fonte
Ż¡sS
(equivalente a0;$¡sS
).Java 7, 86 bytes
Sem dobras ou matrizes sofisticadas, apenas um bom e velho
for
laço :)Experimente no Ideone
Forrado:
fonte
Python 2 , 49 bytes
Experimente online!
fonte
JavaScript (ES6), 51 bytes
Toma de entrada na sintaxe currying:
f([1,2])(3)
.Casos de teste
Mostrar snippet de código
fonte
(a,n,o=[])=>a.map((v,i)=>o[i%n]=~~o[i%n]+v)&&o
a=>n=>a.map((v,i)=>o[i%=n]=~~o[i]+v,o=[])&&o
mas não adiciona o preenchimento zero necessário.f=
deve fazer parte da sua contagem de caracteres.f=
não será necessário. Heres um post na meta sobre isso.Mathematica, 27 bytes
O Mathematica quase tinha um builtin para issoExperimente na Wolfram Sandbox
Uso
Explicação
fonte
Mathematica, 58 bytes
Entrada
Saída
fonte
Perl 6 , 36 bytes
Teste-o
Expandido:
fonte
APL (Dyalog) , 22 bytes
Toma
l
como argumento à esquerda e àa
direita.Experimente online!
{
…}
Função anônima onde⍺
está o argumento da esquerda (l
) e⍵
o argumento da direita (a
).≢⍵
registro (comprimento) dea
⍺÷⍨
dividido porl
⌈
teto (arredondado para cima)⍺,⍨
acrescentarl
s←
armazenar ems
(para s hape)×/
produto disso (ou seja, quantos inteiros são necessários)⍵↑⍨
pegue muitos números inteiros dea
(preenchimento com zeros)s⍴
r eshape para moldars
(linhas, colunas)+⌿
somas colunaresfonte
Haskell ,
5949 bytesExperimente online!
fonte
Perl 6 , 40 bytes
Experimente online!
Se você gosta do número 42, pode trocar
*
por um∞
. Isso tornará 42 bytes :—).Explicação :
A mágica por trás do último "complemento" é que o operador é "reduza com zip com +". A propósito, isso seria interrompido se o usássemos apenas em uma lista com uma lista dentro, mas isso nunca acontece se a lista original não estivesse vazia (devido à penúltima linha). Observe também que acabamos pegando não apenas
@a
, mas@a * $l
itens. Felizmente, adicionamos apenas zeros que não afetam o resultado final.fonte
Casca , 9 bytes
Experimente online!
Explicação
fonte
Pitão , 8 bytes
Experimente aqui!
Pitão , 10 bytes
Experimente aqui!
Explicação
Explicação nº 1
Explicação nº 2
fonte
sM.TcEQ
[1], 3
, o que daria em[1]
vez de[1, 0, 0]
.J ,
1512 bytesExperimente online!
Explicação
fonte
[:+/-@[[\]
:?05AB1E , 8 bytes
Experimente online!
fonte
05AB1E , 8 bytes
Experimente online!
fonte
¹
vs²
)SOGL V0.12 , 14 bytes
Experimente aqui! ou Experimente todos os casos de teste. isso é escrito como uma função sem nome e espera
chunk length; array
na pilha.Explicação:
fonte
F
há no código Try it Here que você vinculou?f=a=>a+2
af=
parte não é contada - no SOGLF\n
não é contado.05AB1E , 12 bytes
Experimente online!
Explicação
fonte
Mathematica, 43 bytes
fonte
Clojure , 42 bytes
Experimente online!
fonte
R ,
6257 bytes-5 bytes graças a user2390246
Experimente online!
Atualizado porque não precisa mais lidar com o caso vazio.
pads
a
com zeros, constrói uma matriz del
linhas e calcula e retorna as somas da linha.fonte
Empilhados , 24 bytes
Experimente online!
Explicação
fonte
Java (OpenJDK 8) , 64 bytes
Experimente online!
fonte
Japonês , 7 bytes
Cara, eu lutei com o método Japt errado por muito tempo tentando fazê-lo funcionar no
[1], 3
caso de teste em uma quantidade razoável de bytes!Tente
Explicação
Entrada implícita de matriz
U
e número inteiroV
.Gere uma matriz de números inteiros de
0
paraV-1
e passe cada um deles por uma funçãoX
sendo o elemento atual.Pegue todos os
V
elementos deU
, começando no índiceX
.Reduza essa matriz por adição.
fonte
C, (GCC)
10186 bytesExperimente online!
Uso
Observe que você precisa passar o comprimento da (s) matriz (s) e uma nova matriz dinâmica na pilha (m).
fonte
PowerShell , 62 bytes
Experimente online!
Tomamos raios de entrada
$a
e$l
ength. Em seguida, faça um loop de1
para$l
. A cada iteração, definimos o auxiliar$y
como um a menos do que o número atual (isso ocorre porque os índices 0 do PowerShell, mas o$l
ength está na indexação 1). Em seguida, configuramos nossa$o
saída0
e retornamos novamente$l
. Cada iteração interna que estamos simplesmente acumulando no elemento rray$o
indexado adequadamente$a
. Isso aproveita o fato de que a indexação após o final da matriz retorna$null
e0 + $null = 0
.Depois que o loop interno é concluído, produzimos
$o
e para o próximo bloco. As várias saídas são deixadas no pipeline e a saída via implícitaWrite-Output
acontece na conclusão do programa.fonte
Perl 5 , 44 + 1 (-a) = 45 bytes
Experimente online!
Edit: corrigido o caso em que o comprimento solicitado era menor que o array de entrada
fonte
Casca , 10 bytes
Experimente online!
Ungolfed / Explicação
fonte
Scala 2.12.2 , 80 bytes
É um pouco mais curto que a solução Java.
fonte