Dada uma lista não vazia de linhas de números não vazias, calcule a soma sábia da coluna , que é outra lista que possui o comprimento da linha de entrada mais longa. A primeira entrada da lista de saída é a soma de todas as primeiras entradas das linhas de entrada, a segunda é a soma de todos os segundos elementos (se disponíveis) etc. Acho que o exemplo a seguir explica melhor:
Input: {[1,2,3,4],[1],[5,2,3],[6,1]}
Computation: [1,2,3,4]
+ . . .
[1]. . .
+ + + .
[5,2,3].
+ + . .
[6,1]. .
= = = =
Output: [13,5,6,4]
Casos de teste
{[0]} -> 0
{[1],[1,1,1,1]} -> [2,1,1,1]
{[1],[1,2],[1,2,3],[1,2,3,4]} -> [4,6,6,4]
{[1,6,2,-6],[-1,2,3,5]} -> [0,8,5,-1]
Respostas:
Geléia , 1 byte
Experimente online! ou verifique todos os casos de teste .
Como funciona
O átomo da soma
S
é uma abreviação de+/
, que realiza redução por adição.O rápido
/
reduz ao longo da dimensão mais externa, por isso chama seu link para os elementos da entrada. Aqui, os elementos são as linhas.O átomo de adição é
+
vetorizado, portanto, a adição de dois vetores de linha realiza a adição de elemento a elemento. Quando os argumentos têm comprimentos diferentes, os elementos do argumento mais longo que não têm contrapartida no menor são deixados inalterados.Em
S
suma , com uma matriz irregular como argumento, calcula a soma em colunas, pulando as entradas ausentes nas linhas mais curtas.fonte
S€
, então?/
não vetoriza; simplesmente aplica a díade correspondente a todos os elementos de seu argumento.Python 2 ,
4745 bytesObrigado a @vaultah por jogar fora 2 bytes!
Experimente online!
fonte
Perl 6 , 23 bytes
fonte
Mathematica, 15 bytes
fonte
Haskell, 34 bytes
Experimente online! Uso:
fonte
import
que já consome tantos bytes: DCJam ,
75 bytes2 bytes de desconto, graças a Dennis!
Isso define um bloco anônimo que pega uma lista de listas, como
[[1 2 3 4] [1] [5 2 3] [6 1]]
, e o substitui por uma lista[13 5 6 4]
,.Experimente online! Ou verifique todos os casos de teste .
Explicação
fonte
MATL , 3 bytes
( MATL não sabe que o plural de "boi" é "boi" ... )
Entrada é uma matriz de células de vetores de linhas numéricas, no mesmo formato que no texto do desafio:
Experimente online! Ou verifique todos os casos de teste .
fonte
JavaScript (ES6),
5148 bytesEconomizou 3 bytes, graças à ETHproductions
Casos de teste
Mostrar snippet de código
fonte
reduce
?a=>a.reduce((l,r)=>r.map((e,i)=>e+(l[i]||0)))
tem apenas 45 bytes.Maravilha , 11 bytes
Transponha e mapeie com a função soma. Uso:
fonte
C ++ 14, 130 bytes
Como lambda genérico sem nome:
Requer
C
a ser comovector<vector<int>>
e valor de retornor
a ser comovector<int>
(deve ser aprovado de acordo com a meta ).Ungolfed & uso:
fonte
Pitão - 4 bytes
Experimente online aqui .
fonte
Haskell,
61 4140 bytesObrigado @Laikoni por -20 bytes, @nimi por -1 byte!
Explicação: É apenas um somatório recursivo dos primeiros elementos da lista, também lidando com o descarte de listas vazias em cada etapa intermediária:
fonte
(sum$sum.(take 1)<$>l)
porsum[h|h:_<-l]
e(f$filter(/=[])$drop 1<$>l)
porf[t|_:t<-l,t>[]]
.[h|h:_<-l]
!f[t:u|_:t:u<-l]
.J, 5 bytes
Recebe a entrada como uma lista em caixa de listas.
Casos de teste
fonte
Dyalog APL , 3 bytes
+⌿
soma coluna-sábio↑
o argumento misto (lista de lista, empilhado em matriz, preenchido com zeros)TryAPL online!
fonte
Pyke, 4 bytes
Experimente aqui!
fonte
Java 8, 124 bytes
esta é uma expressão lambda para um
Function< int[ ][ ], int[ ] >
ele pega o maior comprimento da matriz da entrada, cria uma nova matriz desse tamanho e grava as somas de cada coluna na matriz.
fonte
Oitava, 69 bytes
fonte
R,
10597 bytesIsso recebe na entrada um
list
objeto chamadow
no formulário:Ele gera a soma da coluna:
[1] 3 4 3 4
Esta solução é bastante longa para mim. R tem a particularidade de reciclar quando você tenta vincular vetores de comprimento diferente. Por exemplo :
b
é reutilizado uma vez para caber, e é por isso que começo com uma lista.O programa ajusta o comprimento de todos os elementos da lista como o mais longo, liga os elementos e calcula a soma da coluna. O ajuste do comprimento produz
NA
's, que são ignorados pelosum
.-8 bytes graças a @Jarko Dubbeldam!
fonte
colSums(a,na.rm=T)
salva alguns bytes.na.rm=T
emn=T
.PHP, 63 bytes
chame no navegador com parâmetros GET como lista de entradas.
Exemplo:
script.php?a[]=1&a[]=2&a[]=3&a[]=4&b[]=1&c[]=5&c[]=2&c[]=3&d[]=6&d[]=1
(os nomes das matrizes são ignorados, para que você possa nomeá-los da maneira que desejar.)
Tente esta função para testar:
ou use
http_build_query($array,a)
para converter uma determinada matriz de matrizes em parâmetros GET.fonte
Clojure, 70 bytes
Um loop aninhado básico.
fonte
Japt, 5 bytes
Teste online!
U
é a matriz de entrada e,z
nas matrizes, gira a matriz no sentido horário 90 graus. Assim sendo,torna-se
(Espaçamento adicionado apenas para fins de exibição.)
mx
em seguida,m
aps pelo somatório (x
), o que dá o resultado desejado:[13,5,6,4]
.fonte