add new solutions

This commit is contained in:
kanna5 2025-12-31 15:14:22 +09:00
parent 71189b61cf
commit 9c2c959a9b
Signed by: kkyy
GPG key ID: 06332F3965E9B0CF
10 changed files with 349 additions and 8 deletions

View file

@ -0,0 +1,63 @@
package q840
func checkSquare(x, y int, grid [][]int) bool {
seen := uint16(0)
rowSum, colSum := [3]int{}, [3]int{}
diag1sum, diag2sum := 0, 0
for ty := range 3 {
for tx := range 3 {
num := grid[y+ty][x+tx]
if num < 1 || num > 9 {
return false
}
tSeen := seen | (1 << (num - 1))
if tSeen == seen { // duplicate number
return false
}
seen = tSeen
rowSum[ty] += num
colSum[tx] += num
if tx == ty {
diag1sum += num
}
if tx+ty == 2 {
diag2sum += num
}
}
}
if diag1sum != diag2sum {
return false
}
for i := range 3 {
if rowSum[i] != diag1sum || colSum[i] != diag1sum {
return false
}
}
return true
}
func numMagicSquaresInside(grid [][]int) int {
if len(grid) < 3 || len(grid[0]) < 3 {
return 0
}
w, h := len(grid[0]), len(grid)
count := 0
for y := range h - 2 {
for x := range w - 2 {
if grid[y+1][x+1] != 5 { // the center cell has to be 5
continue
}
if checkSquare(x, y, grid) {
count++
}
}
}
return count
}
var _ = numMagicSquaresInside