Tome una matriz de enteros positivos como entrada y envíe las sumas individuales de los elementos en las líneas diagonales a través de la matriz.
Solo contarás las líneas que van diagonalmente hacia abajo y hacia la derecha. Debe comenzar con la diagonal que contiene solo el elemento inferior izquierdo, luego la diagonal de longitud dos por encima de eso (si existe) y así sucesivamente hasta la diagonal que contiene solo el elemento superior derecho, como se ilustra a continuación.
Ejemplo:
Input:
8 14 5 1
10 5 5 8
6 6 8 10
15 15 4 11
Output:
15, 21, 20, 32, 29, 13, 1
(Diagonals: {{15},{6,15},{10,6,4},{8,5,8,11},{14,5,10},{5,8},{1}})
Input:
1
Output:
1
Input:
1 5
Output:
1, 5
Input:
4
1
Output:
1, 4
Input:
17 4 5
24 16 5
9 24 10
1 14 22
1 21 24
4 4 17
24 25 17
Output:
24, 29, 22, 39, 47, 70, 43, 9, 5
Los formatos de entrada y salida son opcionales como siempre.
Este es el código de golf , por lo que gana la presentación más corta en cada idioma.
Respuestas:
Haskell ,
4037 bytesPruébalo en línea! Uso:
(foldl1$(.(++z)).zipWith(+).(0:)) [[1,2,3],[4,5,6]]
.Editar: ¡ Gracias a Ørjan Johansen por -3 bytes!
Sin golf:
z
es una lista de infinitos ceros. Enf
plegamos la lista de listasm
combinando dos listas con la función#
. En#
la primera listas
contiene las sumas de columnas acumuladas hasta ahora y la segunda listat
es la nueva fila que debe agregarse. Cambiamoss
un elemento a la derecha agregando un cero al frente y sumandos
yt
con elementoszipWith(+)
. Debido a ques
puede ser arbitrariamente grande, tenemos que rellenart
con ceros suficientes agregandoz
.fuente
foldl1$(.(++z)).zipWith(+).(0:)
.Mathematica,
5354 bytesFunción pura que toma una matriz 2D como entrada y devuelve una lista. (Las entradas no tienen que ser números enteros o pares).
Diagonal[#,k]
Devuelve lak
diagonal th arriba (o abajo, sik
es negativa) la diagonal principal.{k,-l@#,l@#&@@#}
calcula el rango de diagonales necesarias según las dimensiones de la matriz de entrada. YTr
suma las entradas de cada diagonal.fuente
Tr@Diagonal[m,#]&/@Range@@({-1,1}(Dimensions[m=#]-1))&
MATL , 6 bytes
Pruébalo en línea! O verificar todos los casos de prueba .
Explicación
fuente
s==sum(x(:))
, en lugar de apegarte a la convención MATLAB, como parece hacer MATL?sum(x)
ysum(x,1)
. Para una matrizx
, el hecho de que sesum(x)
comporte de manera diferente si la matriz tiene 1 fila es a veces molesto. Pero al final decidí ir con Matlab, por lo que los dos idiomas están más cerca; y agregue algunasfun(x,1)
funciones para los casos más comunesJalea , 5 bytes
Pruébalo en línea!
Cómo funciona
fuente
ŒD
¿ no ?ŒD
los raros pedidos impidieron que fuera útil.JavaScript (ES6),
6558 bytesfuente
a=>a.map(r=>r.map(v=>s[i]=~~s[i++]+v,i=--y),s=[],y=a.length)&&s
CJam ,
2221 bytesGuardado 1 byte gracias a Martin Ender
Bloque anónimo que espera el argumento en la pila y deja el resultado en la pila.
Pruébalo en línea!
Cómo funciona
fuente
05AB1E , 17 bytes
Pruébalo en línea!
Explicación
fuente
J , 7 bytes
Pruébalo en línea!
Esto es bastante simple:
Las líneas oblicuas invertidas son las diagonales de la matriz, por lo que esto es solo sumar las diagonales.
fuente
Python 2 , 62 bytes
Pruébalo en línea!
fuente
Jalea , 8 bytes
Pruébalo en línea!
La mitad del código se usa para poner los resultados en el orden correcto.
¿Cómo?
fuente
Perl 5, 47 bytes
fuente
R, 45 bytes
Función sin nombre que toma un objeto de clase matriz como entrada:
Usando la idea explicada en esta respuesta.
fuente
unname
, ¡pero esta es una solución increíble!Octava, 71 bytes
Suponiendo que A es una matriz, por ejemplo:
Entonces tenemos:
Observe que la transposición de la matriz invierte el orden de las sumas diagonales, lo que ahorró un total de dos bytes en el bucle for.
Salida:
fuente
[m,n]=size(A);for i=1:m+n-1,trace([zeros(m-1,m);A'](i:end,:)),end
ahorra 6 bytes. Octave puede hacer indexación directa y asignaciones en línea. Desafortunadamente, no se permite suponer que existe una variable en el espacio de trabajo antes de ejecutar el código, por lo que creo que debe usarloinput
, de esta manera, lo devuelve a 75 bytes. Buen enfoque, así que +1 de mi parte :) ¡Y bienvenidos a PPCG! =)zeros(m-1,m)
se puede escribir~e(m-1,m)
, ahorrando 4 bytes :) Neat huh?Python, 126 bytes
f
solo funciona en la sección triangular inferior, así que la transpongo y obtengo la sección triangular superior de esa manera. No sé por qué laf
función no funciona para valores negativos (cambiéf
para que sea más corta porque la parte para obtener los negativos no funcionó).fuente
C, 148 bytes
Probar en línea
fuente
PHP, 81 bytes
Tomar entrada como matriz 2 D
Pruébalo en línea!
fuente
Awk, 67 Bytes
Sin golf:
Awk se divide en espacios en blanco
$n
es eln
campo th (1 indexado);NF
es el número de campos en la línea,NR
es el número de la fila actual. Las variables no definidas son 0 y se crean en el primer uso.fuente
PHP, 86 bytes
Una solución amigable con la memoria en dos variantes:
toma datos de los parámetros del script, usa guiones bajos como delimitador;
use la configuración predeterminada (no predeterminada php.ini) o pruébela en línea
fuente
Clojure, 81 bytes
Muy detallado, ya que rellena las listas con ceros para que podamos calcular la suma de columnas.
fuente
Mathica 73 bytes
Este funciona para CUALQUIER matriz 2D mxn (no solo nxn)
ingrese la matriz al final del código de esta manera (el último caso de prueba)
entrada en forma [{a, b, c, d ...}, {m, n}]
fuente