Dada una lista de números [ a 1 a 2 ... a n ] , calcule la suma de todas las matrices Aᵢ donde Aᵢ se define de la siguiente manera ( m es el máximo de todos aᵢ ):
1 2 ⋯ (i-1) i (i+1) ⋯ n
+----------------------------
1 | 0 0 ⋯ 0 aᵢ aᵢ ⋯ aᵢ
2 | 0 0 ⋯ 0 aᵢ aᵢ ⋯ aᵢ
. . . . . . . .
. . . . . . . .
aᵢ | 0 0 ⋯ 0 aᵢ aᵢ ⋯ aᵢ
aᵢ₊₁ | 0 0 ⋯ 0 0 0 ⋯ 0
. . . . . . . .
. . . . . . . .
m | 0 0 ⋯ 0 0 0 ⋯ 0
Ejemplo
Dada la entrada [2,1,3,1]
, construimos la siguiente matriz:
[2 2 2 2] [0 1 1 1] [0 0 3 3] [0 0 0 1] [2 3 6 7]
[2 2 2 2] + [0 0 0 0] + [0 0 3 3] + [0 0 0 0] = [2 2 5 5]
[0 0 0 0] [0 0 0 0] [0 0 3 3] [0 0 0 0] [0 0 3 3]
Reglas y E / S
- puede suponer que la entrada no está vacía
- puede suponer que todas las entradas son no negativas (0≤)
- la entrada puede ser una matriz, lista, matriz, etc. de 1 × n (o n × 1)
- Del mismo modo, la salida puede ser una matriz, una lista de listas, una matriz, etc.
- puede tomar y devolver entradas a través de cualquier formato de E / S predeterminado
- su presentación puede ser un programa o función completa
Casos de prueba
[0] -> [] or [[]]
[1] -> [[1]]
[3] -> [[3],[3],[3]]
[2,2] -> [[2,4],[2,4]]
[3,0,0] -> [[3,3,3],[3,3,3],[3,3,3]]
[1,2,3,4,5] -> [[1,3,6,10,15],[0,2,5,9,14],[0,0,3,7,12],[0,0,0,4,9],[0,0,0,0,5]]
[10,1,0,3,7,8] -> [[10,11,11,14,21,29],[10,10,10,13,20,28],[10,10,10,13,20,28],[10,10,10,10,17,25],[10,10,10,10,17,25],[10,10,10,10,17,25],[10,10,10,10,17,25],[10,10,10,10,10,18],[10,10,10,10,10,10],[10,10,10,10,10,10]]
Respuestas:
Jalea ,
105 bytesPruébalo en línea!
Cómo funciona
fuente
R , 80 bytes
Pruébalo en línea!
Toma entrada de stdin; imprime una
0x1
matriz para entrada0
, que se imprime comofuente
F
es una variable global incorporada cuyo valor inicial esFALSE
. Aquí se coacciona a 0 y se usa como el valor inicial de la suma acumulativa. ¡Esta respuesta demuestra la razón para no usarF
yT
excepto en un código específicamente diseñado para nunca ser usado realmente!Haskell ,
706651 bytesPruébalo en línea!
fuente
JavaScript (ES6),
8879 bytesDevoluciones
[]
para[0]
.Pruébalo en línea!
fuente
APL (Dyalog Unicode) , SBCS de 8 bytes
Programa completo Solicita stdin para la lista, imprime la matriz en stdout.
Utiliza el método de Dennis .
Pruébalo en línea!
⎕
stdin⍴⍨¨
r eshape-selfie de cada↑
mezclar lista de listas en matriz, llenando con ceros⍉
transponer+\
suma acumulativa por filasEl
⍉
no hace ninguna diferencia computacional, por lo que podría omitirse y\
cambiarse⍀
a suma en columnas en lugar de en filas.fuente
Python 2 , 85 bytes
Pruébalo en línea!
fuente
Octava , 64 bytes
Pruébalo en línea!
Explicación:
Una vez más: las expresiones en la lista de argumentos y eval se usan en una función :)
Esto toma
x
como entrada y crea dos matrices idénticas llenas de ceros, con las dimensionesk=a=zeros(length(x),max(x))
. Esto se logra agregando el vector horizontalx
con un vector vertical con1:max(x)
, expandiendo implícitamente las dimensiones a una matriz 2D, y luego multiplicándolo con cero.~(x+...)
desafortunadamente no funciona, ya que eso obligaa
a ser una matriz lógica en el resto de la función.for i=x
es un bucle que hace cada iteracióni=x(1)
,i=x(2)
y así sucesivamente.a(1:i,k++:end)
es la parte de la matriz que debe actualizarse para cada iteración.1:i
es un vector que dice qué filas deben actualizarse. Sii=0
, entonces será un vector vacío, por lo tanto, no se actualizará nada, de lo contrario es1, 2 ...
.++k:end
incrementa lak
matriz en uno y crea un rango desde el primer valor de esta matriz (1,2,3...
) hasta la última columna de laa
matriz.+=i
agrega el valor actual aa
.end,a
termina el ciclo y salea
.fuente
GolfScript , 39 bytes
Pruébalo en línea!
Utiliza el algoritmo de Dennis .
fuente
Wolfram Language (Mathematica) , 42 bytes
Pruébalo en línea!
fuente
Java 10, 142 bytes
Pruébalo en línea.
fuente
Rubí , 50 bytes.
Pruébalo en línea!
fuente
Pari / GP , 60 bytes
Pruébalo en línea!
fuente