39 lines
623 B
Go
39 lines
623 B
Go
package q2352
|
|
|
|
import "strings"
|
|
|
|
func index(grid [][]int, col bool, i int) string {
|
|
b := strings.Builder{}
|
|
b.Grow(len(grid) * 3)
|
|
for j := range grid {
|
|
var num int
|
|
switch {
|
|
case col: // ith col
|
|
num = grid[j][i]
|
|
default: // ith row
|
|
num = grid[i][j]
|
|
}
|
|
|
|
for range 3 {
|
|
b.WriteByte(byte(num % 256))
|
|
num >>= 8
|
|
}
|
|
}
|
|
return b.String()
|
|
}
|
|
|
|
func equalPairs(grid [][]int) int {
|
|
idx := make(map[string]int, len(grid))
|
|
nEq := 0
|
|
for row := range grid {
|
|
s := index(grid, false, row)
|
|
idx[s]++
|
|
}
|
|
for col := range grid {
|
|
s := index(grid, true, col)
|
|
nEq += idx[s]
|
|
}
|
|
return nEq
|
|
}
|
|
|
|
var _ = equalPairs
|