Índice de suma y tira de mi matriz
Dada una matriz / matriz 2d en su idioma preferido
Entrada:
- La matriz siempre tendrá una longitud impar.
- La matriz siempre será perfectamente cuadrada.
- Los valores de la matriz pueden ser cualquier número entero en su idioma (positivo o negativo)
Ejemplo:
1 2 3 4 5 6 7
2 3 4 5 6 7 8
3 4 50 6 7 8 9
4 5 6 100 8 9 10
5 6 7 8 -9 10 11
6 7 8 9 10 11 12
7 8 900 10 11 12 0
Definiciones:
- El "número central" se define como el número que tiene la misma cantidad de números a la izquierda, derecha, arriba y abajo
En este caso, sus 100 más intermedios
- La "capa externa" es la colección de números cuyo índice xey es 0 o el tamaño de la matriz.
1 2 3 4 5 6 7
2 8
3 9
4 10
5 11
6 12
7 8 900 10 11 12 0
Tu tarea:
Agregue al número central la suma de cada fila y columna después de multiplicar los valores en cada uno por su índice basado en 1
Una sola fila por ejemplo
4 5 6 7 8
para cada número
number * index + number * index.....
4*1 + 5*2 + 6*3 + 7*4 + 8*5 => 100
ejemplo:
2 -3 -9 4 7 1 5 => 61
-2 0 -2 -7 -7 -7 -4 => -141
6 -3 -2 -2 -3 2 1 => -10
8 -8 4 1 -8 2 0 => -20
-5 6 7 -1 8 4 8 => 144
1 5 7 8 7 -9 -5 => 10
7 7 -2 2 -7 -8 0 => -60
|
78 65 60 45 -15 -89 10 => 154
|
=> -16
- Para todas las filas y columnas, combina estos valores.
- Ahora sumas esto también => 154-16 = 138
- Agrega ese número al "número central" y elimina la "capa externa" de la matriz
0 -2 -7 -7 -7 => -88
-3 -2 -2 -3 2 => -15
-8 4 1+138 -8 2 => 395
6 7 -1 8 4 => 69
5 7 8 7 -9 => 26
19 69 442 30 -26
haz esto hasta que termines con un solo número
-2 -2 -3 => -15
4 1060 -8 => 2100
7 -1 8 => 29
27 2115 5
- Agregar 2114 + 2147 a 1060
- Retire la "cubierta exterior" y obtenga 5321
- Ahora nos queda un solo número
esta es la salida!
Casos de prueba:
-6
-6
-7 -1 8
-4 -6 7
-3 -6 6
2
6 7 -2 5 1
-2 6 -4 -2 3
-1 -4 0 -2 -7
0 1 4 -4 8
-8 -6 -5 0 2
-365
8 3 5 6 6 -7 5
6 2 4 -2 -1 8 3
2 1 -5 3 8 2 -3
3 -1 0 7 -6 7 -5
0 -8 -4 -9 -4 2 -8
8 -9 -3 5 7 8 5
8 -1 4 5 1 -4 8
17611
-9 -7 2 1 1 -2 3 -7 -3 6 7 1 0
-7 -8 -9 -2 7 -2 5 4 7 -7 8 -9 8
-4 4 -1 0 1 5 -3 7 1 -2 -9 4 8
4 8 1 -1 0 7 4 6 -9 3 -9 3 -9
-6 -8 -4 -8 -9 2 1 1 -8 8 2 6 -4
-8 -5 1 1 2 -9 3 7 2 5 -6 -1 2
-8 -5 -7 -4 -9 -2 5 0 2 -4 2 0 -2
-3 -6 -3 2 -9 8 1 -5 5 0 -4 -1 -9
-9 -9 -8 0 -5 -7 1 -2 1 -4 -1 5 7
-6 -9 4 -2 8 7 -9 -5 3 -1 1 8 4
-6 6 -3 -4 3 5 6 8 -2 5 -1 -7 -9
-1 7 -9 4 6 7 6 -8 5 1 0 -3 0
-3 -2 5 -4 0 0 0 -1 7 4 -9 -4 2
-28473770
Respuestas:
MATL ,
3634 bytesLa entrada es una matriz 2D con un
;
separador de filasPruébalo en línea! O verificar todos los casos de prueba .
Explicación
fuente
Python 2.7, 229 bytes
Este es mi primer intento de algo como esto, así que espero seguir todas las reglas con esta presentación. Esta es solo una función que toma una lista de listas como su parámetro. Siento que las sumas y la comprensión de la lista probablemente podrían acortarse un poco, pero fue demasiado difícil para mí. :RE
Gracias a Easterly Irk por ayudarme a reducir algunos bytes.
fuente
...) + sum([i*j...
->...)+sum([i*j...
), pero en general, ¡¡¡excelente primera publicación !!!!...]for ...
funciona. Puede eliminar al menos 2 espacios como ese. (el final de la lista toca el ciclo for)C #, 257 bytes
aquí hay una respuesta que no es esolang
sin golf:
fuente
using System.Linq
yusing System
. Sin embargo, no estoy seguro de si es requerido por las reglas.System.Linq
. Otros lenguajes que requieren importación para usar ciertas funciones pasan por el mismo proceso, por lo que creo que es injusto suponer que cada módulo se carga en la memoria en C #.J, 66 bytes
Enfoque directo basado en el proceso descrito en el desafío.
[:+/^:2#\*]+|:
obtiene la suma]+(i.@,~=](]+*)<.@-:)@#*
es una forma particularmente fea de incrementar el centro por la suma.[:}:@}."1@}:@}.
Quita la cubierta exterior. Probablemente hay una mejor manera de hacer esto.Uso
fuente
Brachylog , 114 bytes
Me sorprende que esto funcione para ser sincero. Al menos me di cuenta de que Brachylog realmente necesita un "valor de cambio de ese elemento" como algo incorporado ...
Ejemplo de uso:
Explicación
Versión más legible (y más larga):
Solo explicaré aproximadamente lo que hace cada predicado (es decir, cada línea, excepto la primera que es Predicado principal + predicado 1):
Predicado principal + predicado 1
{l1,?hh.|:2f:7a$\:7a&.}.
: si la entrada tiene solo una fila, finalice el algoritmo y devuelva el único valor. De lo contrario, encuentre todas las filas que satisfagan el predicado 2, luego aplique el predicado 7 en la matriz resultante, luego el predicado 7 en la transposición, luego llame recursivamente.Predicado 2
:Im:I:?:3f.
: tome laI
fila de la matriz, encuentre todos los valores de esa fila que satisfagan el predicado 3I
y la matriz como entradas adicionales.Predicado 3
[L:I:M]h:JmN,Ll:2/D(IJ,M:4&:N+.;'(DIJ),N.)
:L
es la fila,I
es el índice de la fila,M
es la matriz.N
es elJ
elemento º deL
. Si la longitud deL
dividido por 2 es igual a ambosI
yJ
, entonces la salida es la suma deN
con el resultado del predicado 4 en la matriz. De lo contrario, la salida es justaN
. Este predicado recrea esencialmente la matriz con la excepción de que el elemento central se agrega a la suma.Predicado 4
$\:?c:5a+.
: aplique el predicado 5 en cada fila y columna de la matriz, unifique la salida con la suma de los resultados.Predicado 5
:6f+.
: Encuentre todas las salidas válidas del predicado 6 en la fila, unifique el resultado con la suma de la lista resultante.Predicado 6
:ImN,I:1+:N*.
:N
es elI
valor de la fila, unifica la salida conN * (I+1)
.Predicado 7
brbr.
: elimine la primera y la última fila de la matriz.fuente
APL, 56 caracteres
En inglés:
⍣(⌊.5×≢⍵)
repita "la mitad del tamaño de una dimensión redondeada"(⍵⍪⍉⍵)+.×⍳≢⍵
producto interno de la matriz y su transposición con el vector índice(-⍴⍵)↑(⌈.5×⍴⍵)↑
transformar resultado en matriz rellenada con 0s1 1↓¯1 ¯1↓
elimina la cubierta exteriorfuente