Se le dará una matriz A de números enteros en 2-D, y una longitud N. Su tarea es encontrar dentro de la matriz la línea recta (horizontal, vertical o diagonal) de N elementos que produce la suma total más alta, y devolver esa suma .
Ejemplo
N = 3, A =
3 3 7 9 3
2 2 10 4 1
7 7 2 5 0
2 1 4 1 3
Esta matriz tiene 34 líneas válidas, incluidas
Vertical
[3] 3 7 9 3
[2] 2 10 4 1
[7] 7 2 5 0
2 1 4 1 3 [3,2,7] = 12
Horizontal
3 3 7 9 3
2 2 10 4 1
7 7 [2] [5] [0]
2 1 4 1 3 [2,5,0] = 7
Diagonal
3 3 [7] 9 3
2 2 10 [4] 1
7 7 2 5 [0]
2 1 4 1 3 [7,4,0] = 11
La línea máxima es
3 3 7 [9] 3
2 2 [10] 4 1
7 [7] 2 5 0
2 1 4 1 3 [7,10,9] = 26
Nota: las líneas pueden no ajustarse alrededor de los bordes de la matriz.
Entradas
- AX por Y matriz 2D A, con X, Y> 0. Cada elemento de la matriz contiene un valor entero que puede ser positivo, cero o negativo. Puede aceptar esta matriz en un formato alternativo (por ejemplo, una lista de matrices 1-D) si lo desea.
- Un solo entero positivo N, no mayor que max (X, Y).
Salida
- Un valor único que representa la suma máxima de líneas que se puede encontrar en la matriz. Tenga en cuenta que no necesita proporcionar los elementos individuales de esa línea o dónde se encuentra.
Casos de prueba
N = 4, A =
-88 4 -26 14 -90
-48 17 -45 -70 85
22 -52 87 -23 22
-20 -68 -51 -61 41
Output = 58
N = 4, A =
9 4 14 7
6 15 1 12
3 10 8 13
16 5 11 2
Output = 34
N = 1, A =
-2
Output = -2
N = 3, A =
1 2 3 4 5
Output = 12
N = 3, A =
-10 -5 4
-3 0 -7
-11 -3 -2
Output = -5
code-golf
array-manipulation
matrix
usuario2390246
fuente
fuente
[[-10, -5, 4],[-3, 0, -7],[-11,-3,-2]]
->-5
(4 + -7 + -2
)Respuestas:
Jalea , 15 bytes
Pruébalo en línea!
Cómo funciona
fuente
¥
allí ...$
crea una mónada desdeZṚ
, mientras que¥
crea una díada desde laZṚ
cual devuelve el resultado de la misma función (girar 90 CCW) aplicada en su operando izquierdo. Que coincide con el patrón+ ×
y evalúav+(λ×ρ)
(esv = v , (M ZṚ¥ n)
en este caso). Sin embargo, solo el uso$
no funciona porque no hay un+ F
patrón en la cadena diádica.Wolfram Language (Mathematica) , 73 bytes
Pruébalo en línea!
Cómo funciona
Primero toma
N
y luego la matrizA
como entrada.Join@@Partition[#2,{#,#},1,1,-∞]
Busca todosN
porN
submatriz de la matrizA
, acolchado con-∞
cuando sea necesario para asegurar que las líneas corriendo de la rejilla será fuera de la carrera.Para cada uno de esos bloques calculamos
Tr/@Join[#,#,{#,Reverse@#}]
: la traza (es decir, la suma) de cada fila, la traza (es decir, la suma) de cada columna, la traza (en realidad, la traza, por primera vez en la historia del golf de código de Mathematica) del bloque , y el rastro del bloque se invirtió.#
esTranspose@#
.Luego encontramos el
Max
de todos estos.fuente
Max@BlockMap[Tr/@Join[#,#,{#,Reverse@#}]&,#2,{#,#},1]&
también funciona. Pero tenemos que rellenar-∞
para manejar casos dondeA
tiene menos deN
filas o columnas, yBlockMap
no admite relleno.\[Transpose]
) se puede escribir como\:f3c7
.Tr
se usa como rastro.Tr
ya que el rastro de una matriz ha aparecido antes, pero aún es raro y sorprendente.Mathematica,
135123 bytesPruébalo en línea!
fuente
Diagonal[s,#]
tos~Diagonal~#
y{{Transpose@#,#2},{Reverse@#,#2}}
to{#|#2,Reverse@#|#2}
. (El no imprimible es U + F3C7 =\[Transpose]
; TIO no parece de este tipo, aunque alternativa:.{Transpose@#|#2,Reverse@#|#2}
)\[Transpose]
o\:f3c7
(al menos este último es más corto queThread@
) Sin embargo, si la respuesta es Mathematica REPL (no Mathematica script), puede asumir la solución de 3 bytes.Jalea , 16 bytes
Pruébalo en línea!
fuente
µ;Z;UŒD$;ŒDṡ€⁴ẎS€Ṁ
JavaScript
151129 bytesLa función Curry toma dos argumentos, el primero es un conjunto de números, el segundo es un número.
Gracias a Arnauld , ahorre más de 20 bytes.
Mostrar fragmento de código
fuente
1/s
en lugar des==s
debería funcionar como se esperaba.(s=(g=...)(n))>m?s:m
para(g=...)(n)>m?g(n):m
guardar 1 byte.Jq 1.5 , 211 bytes
Espera entrada
N
yA
, por ejemplo:Expandido
Tenga en cuenta que este desafío es básicamente el mismo que el problema 11 del Proyecto Euler
Pruébalo en línea!
fuente
Python 2 ,
208184183176 bytes-float("inf")
para representar que la línea marcada alcanzó fuera de la matriz en lugar de calcular la suma negativa de todos los elementos de la matriz.R,L=range,len
para acortar las funciones integradas y utilizando eny in R(L(A))...R(L(A[y]))
lugar dey,Y in e(A)...x,_ in e(Y)
.float("inf")
al golf9e999
.Pruébalo en línea!
Explicación
fuente
R , 199 bytes
Pruébalo en línea!
Una solución recursiva. Para cada elemento (i, j) de la matriz, devuelve el máximo entre la suma a lo largo de la fila, la suma a lo largo de la columna, la suma a lo largo de cualquier diagonal y el resultado de la función aplicada a (i + 1, j) y (i, j + 1) Los resultados para los casos de prueba se muestran en el TIO.
fuente
Casco , 14 bytes
Pruébalo en línea!
Gracias a los nuevos anti∂iagonals incorporados, esta es una respuesta bastante corta :)
fuente
JavaScript 170 bytes
Todavía wip en la parte de golf agregó 4 caracteres más porque no logré un caso donde el máximo es negativo y N es mayor que 1
fuente
G=
no se cuenta)a||M,b||M,c||M,d||M
lugar dea,b,c,d
?Python 2 ,
222218 bytesPruébalo en línea!
fuente