lc-go/solutions/18/q1895/solution.go
2026-01-25 11:56:12 +09:00

59 lines
883 B
Go

package q1895
func isMagicSq(grid [][]int, x, y, w int) bool {
diag1Sum := 0
diag2Sum := 0
for i := range w {
ax, ay := x+i, y+i
diag1Sum += grid[ay][ax]
ax = x + w - 1 - i
diag2Sum += grid[ay][ax]
}
if diag1Sum != diag2Sum {
return false
}
// horizontal
for dy := range w {
sum := 0
for dx := range w {
sum += grid[y+dy][x+dx]
}
if sum != diag1Sum {
return false
}
}
// vertical
for dx := range w {
sum := 0
for dy := range w {
sum += grid[y+dy][x+dx]
}
if sum != diag1Sum {
return false
}
}
return true
}
func largestMagicSquare(grid [][]int) int {
k := 1
gW, gH := len(grid[0]), len(grid)
Outer:
for w := 2; w <= min(gW, gH); w++ {
for y := range gH - w + 1 {
for x := range gW - w + 1 {
if isMagicSq(grid, x, y, w) {
k = w
continue Outer
}
}
}
}
return k
}
var _ = largestMagicSquare