Você receberá uma matriz 2-D A de números inteiros e um comprimento N. Sua tarefa é encontrar na matriz a linha reta (horizontal, vertical ou diagonal) dos elementos N que produz a soma total mais alta e retornar essa soma .
Exemplo
N = 3, A =
3 3 7 9 3
2 2 10 4 1
7 7 2 5 0
2 1 4 1 3
Essa matriz possui 34 linhas válidas, incluindo
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
A linha máxima é
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: as linhas podem não envolver as bordas da matriz.
Entradas
- AX por Y 2-D array A, com X, Y> 0. Cada elemento do array contém um valor inteiro que pode ser positivo, zero ou negativo. Você pode aceitar essa matriz em um formato alternativo (por exemplo, lista de matrizes 1-D), se desejar.
- Um único número inteiro positivo N, não superior a max (X, Y).
Resultado
- Um único valor que representa a soma máxima de linhas que pode ser encontrada na matriz. Observe que você não precisa fornecer os elementos individuais dessa linha ou de onde ela está localizada.
Casos de teste
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
user2390246
fonte
fonte
[[-10, -5, 4],[-3, 0, -7],[-11,-3,-2]]
->-5
(4 + -7 + -2
)Respostas:
Gelatina , 15 bytes
Experimente online!
Como funciona
fonte
¥
lá ...$
cria uma mônada a partir deZṚ
, enquanto¥
cria uma díade a partir daZṚ
qual retorna o resultado da mesma função (girar 90 CCW) aplicada em seu operando esquerdo. O que corresponde ao padrão+ ×
e avaliav+(λ×ρ)
(v = v , (M ZṚ¥ n)
neste caso). No entanto, apenas o uso$
não funciona porque não há+ F
padrão na cadeia diádica.Wolfram Language (Mathematica) , 73 bytes
Experimente online!
Como funciona
Toma primeiro
N
e depois a matrizA
como entrada.Join@@Partition[#2,{#,#},1,1,-∞]
encontra cadaN
porN
submatriz da matrizA
, preenchidos com-∞
quando necessário para assegurar que as linhas correndo para fora da grade será fora da corrida.Para cada um desses blocos, calculamos
Tr/@Join[#,#,{#,Reverse@#}]
: o rastreamento (ou seja, soma) de cada linha, o rastreamento (ou seja, soma) de cada coluna, o rastreamento ( na verdade o rastreamento, pela primeira vez na história do golfe com códigos do Mathematica) do bloco , e o rastreamento do bloco invertido.#
éTranspose@#
.Então encontramos o
Max
de tudo isso.fonte
Max@BlockMap[Tr/@Join[#,#,{#,Reverse@#}]&,#2,{#,#},1]&
também funciona. Mas precisamos preencher-∞
para lidar com casos em queA
há menos deN
linhas ou colunas eBlockMap
não suporta preenchimento.\[Transpose]
) pode ser digitado como\:f3c7
.Tr
é usado como rastreamento.Tr
traços de uma matriz já apareceu antes, mas ainda é raro e surpreendente.Mathematica,
135123 bytesExperimente online!
fonte
Diagonal[s,#]
paras~Diagonal~#
e{{Transpose@#,#2},{Reverse@#,#2}}
para{#|#2,Reverse@#|#2}
. (O impublicável é U + F3C7 =\[Transpose]
; não TIO não parecem assim, embora Alternativa:.{Transpose@#|#2,Reverse@#|#2}
)\[Transpose]
ou\:f3c7
(pelo menos o último é menor queThread@
) No entanto, se a resposta for Mathematica REPL (não é o script do Mathematica), você poderá assumir a solução de 3 bytes.Gelatina , 16 bytes
Experimente online!
fonte
µ;Z;UŒD$;ŒDṡ€⁴ẎS€Ṁ
JavaScript,
151129 bytesA função Curry usa dois argumentos, o primeiro é uma matriz de matriz de números, o segundo é um número.
Graças a Arnauld , salve mais de 20 bytes.
Mostrar snippet de código
fonte
1/s
em vez des==s
deve funcionar como esperado.(s=(g=...)(n))>m?s:m
para(g=...)(n)>m?g(n):m
economizar 1 byte.Jq 1.5 , 211 bytes
Espera entrada
N
eA
, por exemplo:Expandido
Observe que esse desafio é basicamente o mesmo que problema do Project Euler 11
Experimente online!
fonte
Python 2 ,
208184183176 bytes-float("inf")
para representar que a linha marcada alcançou fora da matriz em vez de calcular a soma negativa de todos os elementos da matriz.R,L=range,len
para encurtar as funções internas e usando emy in R(L(A))...R(L(A[y]))
vez dey,Y in e(A)...x,_ in e(Y)
.float("inf")
em9e999
.Experimente online!
Explicação
fonte
R , 199 bytes
Experimente online!
Uma solução recursiva. Para cada elemento (i, j) da matriz, ele retorna o máximo entre a soma ao longo da linha, a soma ao longo da coluna, a soma na diagonal e o resultado da função aplicada a (i + 1, j) e (i, j + 1). Os resultados para os casos de teste são mostrados no TIO.
fonte
Casca , 14 bytes
Experimente online!
Graças ao novo anti-diagonal incorporado, esta é uma resposta bastante curta :)
fonte
JavaScript 170 bytes
ainda limpar a parte do golfe adicionou mais 4 caracteres porque eu não consegui um caso em que o máximo é negativo e N é maior que 1
fonte
G=
não é contado)a||M,b||M,c||M,d||M
vez dea,b,c,d
?Python 2 ,
222218 bytesExperimente online!
fonte