Reto:
Dada una matriz de entrada cuadrada A , rellene la matriz con una fila y una columna en los cuatro lados.
- El valor de cada elemento en la fila superior e inferior debe ser la suma de los elementos en cada columna correspondiente.
- El valor de cada elemento en la columna izquierda y derecha debe ser la suma de los elementos en cada fila correspondiente.
- El valor de los elementos en la esquina superior izquierda e inferior derecha debe ser la suma de los elementos en diagonal
- El valor de los elementos en la esquina superior derecha y en la esquina inferior izquierda debe ser la suma de los elementos en el anti-diagonal.
Ejemplo:
A =
1 5 3
3 2 4
2 5 5
Output:
8 6 12 12 7
9 1 5 3 9
9 3 2 4 9
12 2 5 5 12
7 6 12 12 8
Explicación:
Los elementos superior izquierdo e inferior derecho son la suma de la diagonal 1 + 2 + 5 = 8 . Los elementos superior derecho e inferior izquierdo son la suma del antia diagonal 2 + 2 + 3 = 7 .
La fila superior e inferior (excepto las esquinas) son la suma de cada una de las columnas en A : 1 + 3 + 2 = 6 , 5 + 2 + 5 = 12 y 3 + 4 + 5 = 12 . Del mismo modo, la columna izquierda y derecha (excepto las esquinas) son la suma de cada una de las filas de A : 1 + 5 + 3 = 9 , 3 + 2 + 4 = 9 y 2 + 5 + 5 = 12 .
Entrada:
- Una matriz cuadrada no vacía, con enteros no negativos.
- Formato opcional
Salida:
- La matriz acolchada como se explicó anteriormente
- Formato opcional, pero debe ser el mismo que el formato de entrada
Casos de prueba:
Utilice las presentaciones en este desafío si desea convertir el formato de entrada a uno más adecuado (por ejemplo [[1, 5],[0, 2]]
).
0
----------------
0 0 0
0 0 0
0 0 0
1 5
0 2
----------------
3 1 7 5
6 1 5 6
2 0 2 2
5 1 7 3
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
----------------
65 65 65 65 65 65 65
65 17 24 1 8 15 65
65 23 5 7 14 16 65
65 4 6 13 20 22 65
65 10 12 19 21 3 65
65 11 18 25 2 9 65
65 65 65 65 65 65 65
15 1 2 12
4 10 9 7
8 6 5 11
3 13 14 0
----------------
30 30 30 30 30 30
30 15 1 2 12 30
30 4 10 9 7 30
30 8 6 5 11 30
30 3 13 14 0 30
30 30 30 30 30 30
Este es el código de golf , por lo que gana la solución más corta en cada idioma . Las explicaciones son altamente alentadas.
fuente
Respuestas:
Octava , 64 bytes
¡Gracias a Tom Carpenter por guardar 4 bytes y corregir un error que tuve en el código original!
Pruébalo en línea!
Explicación:
Tenga en cuenta que escribí esto mucho después de publicar el desafío.
fuente
Jalea , 27 bytes
Pruébalo en línea!
fuente
MATL ,
2726 bytesPruébalo en línea! O verificar todos los casos de prueba .
Explicación
fuente
APL (Dyalog) , 37 bytes
Pruébalo en línea!
1 1∘⍉
diagonal (iluminado, colapsar ambos ejes en uno)d←
almacenar esa función como d y aplicarla al argumento+⌿
anteponer las sumas de la columnad∘⌽,
anteponer d aplicado al argumento invertido(
…)⍪
Apila lo siguiente en la parte superior:+/,⊢,+/
sumas de fila, el argumento no modificado, sumas de fila(
…)⍪
Apila lo siguiente en la parte superior:d,+⌿,d∘⌽
aplicado al argumento, sumas de columnas, d aplicado al argumento invertidofuente
Jalea , 26 bytes
Pruébalo en línea!
Parece sorprendentemente diferente de la solución de Erik .
Finalmente logré entender cómo
¦
funciona (depurando el código de Jelly, jajaja). Lástima que requiera una€
para trabajarÇ
en mi caso.Explicación
El código usa tres enlaces. El primer enlace auxiliar rellena un vector con su suma en ambos extremos, el segundo enlace auxiliar fija dos esquinas de la matriz y el enlace principal los llama apropiadamente.
fuente
Python 3 , 155 bytes
Esta es la sugerencia de @LeakyNun, que ahorra 54 bytes . Luego lo jugué un poco.
Pruébalo en línea!
Solución inicial: Python 3 , 216 bytes
Pruébalo en línea!
fuente
Python 2 ,
268250184174 bytes10 gracias a Stewie Griffin
Pruébalo en línea!
Algunas explicaciones La entrada se carga como una matriz. Primero, el código calcula la suma de cada columna y cada fila usando numpy.sum. Luego calcula la suma de la diagonal por numpy.trace. Después de esto, obtiene la otra diagonal haciendo un giro de izquierda a derecha en la matriz. Finalmente, usa numpy.vstack y numpy.hstack para unir las piezas.
fuente
R, 129 bytes
Una función anónima que toma una matriz cuadrada como entrada. Publicaré una explicación si hay interés.
fuente
PHP , 211 bytes
Pruébalo en línea!
Expandido
fuente
Python 3 , 125 bytes
Pruébalo en línea!
Ligeramente incólume:
Esta toma de entrada formateada como una matriz numpy, a continuación, utiliza los
np.c_
enp.r_
indexación de herramientas para construir una nueva matriz de una sola vez.np.trace
ynp.sum
se usan para calcular las sumas a lo largo de las diagonales y en cualquier otro lugar, respectivamente.T
se usa para tomar la transposición antes y después de concatenar las sumas porque es más corta que hacer que todas las matrices sean bidimensionales y se usennp.r_
.m[::-1]
guarda bytes en comparación conrot90(m)
ofliplr(m)
para encontrar la traza para la segunda diagonal.fuente
JavaScript (ES6), 170 bytes
La entrada y salida es una matriz 2D de números.
Explicado
Fragmento de prueba
La entrada / salida ha sido formateada con nuevas líneas y pestañas.
fuente
LOGOTIPO , 198 bytes
La función
f
toma una matriz como una lista 2D, luego genera la matriz resultante.g
Es la función auxiliar.fuente