Dada una lista no vacía de filas de números no vacías, calcule la suma sabia de columnas , que es otra lista que tiene la longitud de la fila de entrada más larga. La primera entrada de la lista de salida es la suma de todos los primeros entrantes de las filas de entrada, la segunda es la suma de todos los segundos elementos (si están disponibles), etc. Creo que el siguiente ejemplo lo explicará mejor:
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 prueba
{[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]
Respuestas:
Gelatina , 1 byte
Pruébalo en línea! o verificar todos los casos de prueba .
Cómo funciona
El átomo de suma
S
es una abreviatura de+/
, que realiza la reducción por adición.El rápido se
/
reduce a lo largo de la dimensión exterior, por lo que llama a su enlace para los elementos de la entrada. Aquí, los elementos son las filas.El átomo de suma se
+
vectoriza, por lo que la suma de dos vectores de fila realiza la suma elemento por elemento. Cuando los argumentos tienen longitudes diferentes, los elementos del argumento más largo que no tienen contraparte en el más corto no se modifican.En general, con una matriz irregular como argumento,
S
calcula la suma en columnas, omitiendo las entradas que faltan en las filas más cortas.fuente
S€
, entonces./
no se vectoriza; simplemente aplica la diada correspondiente a todos los elementos de su argumento.Python 2 ,
4745 bytes¡Gracias a @vaultah por jugar 2 bytes!
Pruébalo en línea!
fuente
Perl 6 , 23 bytes
fuente
Mathematica, 15 bytes
fuente
Haskell, 34 bytes
Pruébalo en línea! Uso:
fuente
import
que yaCJam ,
75 bytes2 bytes de descuento gracias a Dennis!
Esto define un bloque anónimo que toma una lista de listas, como
[[1 2 3 4] [1] [5 2 3] [6 1]]
, y la reemplaza por una lista[13 5 6 4]
,.Pruébalo en línea! O verificar todos los casos de prueba .
Explicación
fuente
MATL , 3 bytes
( MATL no sabe que el plural de "buey" es "bueyes" ... )
La entrada es una matriz de celdas de vectores de fila numéricos, en el mismo formato que en el texto de desafío:
Pruébalo en línea! O verificar todos los casos de prueba .
fuente
JavaScript (ES6),
5148 bytesGuardado 3 bytes, gracias a ETHproductions
Casos de prueba
Mostrar fragmento de código
fuente
reduce
?a=>a.reduce((l,r)=>r.map((e,i)=>e+(l[i]||0)))
solo tiene 45 bytes.Maravilla , 11 bytes
Transponer y mapear con función de suma. Uso:
fuente
C ++ 14, 130 bytes
Como lambda genérico sin nombre:
Requiere
C
ser comovector<vector<int>>
y devolver el valorr
para ser comovector<int>
(debería estar bien según el meta ).Sin golf y uso:
fuente
Pyth - 4 bytes
Pruébelo en línea aquí .
fuente
Haskell,
61 4140 bytes¡Gracias @Laikoni por -20 bytes, @nimi por -1 byte!
Explicación: Es solo una suma recursiva de los primeros elementos de la lista, que también se ocupa de descartar listas vacías en cada paso intermedio:
fuente
(sum$sum.(take 1)<$>l)
consum[h|h:_<-l]
y(f$filter(/=[])$drop 1<$>l)
conf[t|_:t<-l,t>[]]
.[h|h:_<-l]
!f[t:u|_:t:u<-l]
.J, 5 bytes
Toma la entrada como una lista en caja de listas.
Casos de prueba
fuente
Dyalog APL , 3 bytes
+⌿
suma de columnas↑
El argumento mixto (lista de lista, apilado en matriz, relleno con ceros)TryAPL en línea!
fuente
Pyke, 4 bytes
Pruébalo aquí!
fuente
Java 8, 124 bytes
esta es una expresión lambda para un
Function< int[ ][ ], int[ ] >
toma la mayor longitud de matriz de la entrada, crea una nueva matriz de ese tamaño y luego escribe las sumas de cada columna en la matriz.
fuente
Octava, 69 bytes
fuente
R,
10597 bytesEsto toma como entrada un
list
objeto llamadow
en la forma:Produce la suma de columnas:
[1] 3 4 3 4
Esta solución es bastante larga para mí. R tiene la particularidad de reciclar cuando intentas unir vectores de diferente longitud. Por ejemplo :
b
se reutiliza una vez para encajar, por eso empiezo con una lista.El programa ajusta la longitud de todos los elementos de la lista como uno de los más largos, une los elementos y calcula la suma en columnas. El ajuste de longitud produce
NA
's, que son ignorados por elsum
.-8 bytes gracias a @Jarko Dubbeldam!
fuente
colSums(a,na.rm=T)
Guarda algunos bytes.na.rm=T
enn=T
.PHP, 63 bytes
Llame al navegador con parámetros GET como lista de entradas.
Ejemplo:
script.php?a[]=1&a[]=2&a[]=3&a[]=4&b[]=1&c[]=5&c[]=2&c[]=3&d[]=6&d[]=1
(los nombres de matriz se ignoran, por lo que puede nombrarlos de la forma que desee).
Pruebe esta función para probar:
o úselo
http_build_query($array,a)
para convertir una determinada matriz de matrices en parámetros GET.fuente
Clojure, 70 bytes
Un bucle anidado básico.
fuente
Japt, 5 bytes
¡Pruébelo en línea!
U
es la matriz de entrada, yz
en las matrices gira la matriz en sentido horario 90 grados. Por lo tanto,se convierte
(Se agrega espacio solo para fines de visualización).
mx
a continuación,m
aps mediante la suma (x
), que da el resultado deseado:[13,5,6,4]
.fuente