59 lines
883 B
Go
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
|