package main import "math" type Coordinate [4]int func (c Coordinate) Distance(b Coordinate) int { sum := 0 for i := 0; i < 4; i++ { sum += abs(c[i] - b[i]) } return sum } type Constellation map[Coordinate]struct{} func (c Constellation) Distance(b Coordinate) int { shortestDistance := math.MaxInt64 for p := range c { if p.Distance(b) < shortestDistance { shortestDistance = p.Distance(b) } } return shortestDistance } func (c Constellation) CelestialDistance(b Constellation) int { shortestDistance := math.MaxInt64 for p := range c { if b.Distance(p) < shortestDistance { shortestDistance = b.Distance(p) } } return shortestDistance } func (c Constellation) Add(b Coordinate) { c[b] = struct{}{} } func (c Constellation) Merge(b Constellation) { for p := range b { c[p] = struct{}{} delete(b, p) } } func NewConstellation(b Coordinate) Constellation { c := Constellation{b: struct{}{}} return c }