package aoc type CoordByteMap struct { Field map[Coordinate]byte Height int Width int } func StringSliceToCoordByteMap(input []string) CoordByteMap { ret := CoordByteMap{ Field: make(map[Coordinate]byte), Height: len(input), Width: 0, } for y := range input { for x := range input[y] { ret.Field[Coordinate{X: x, Y: y}] = input[y][x] if x > ret.Width { ret.Width = x } } } return ret } func (m *CoordByteMap) Get(pos Coordinate) byte { if pos.X <= m.Width && pos.Y <= m.Height { return m.Field[pos] } return 0 } func (m *CoordByteMap) Put(pos Coordinate, val byte) { m.Field[pos] = val } func (m CoordByteMap) String() string { var ret string for y := 0; y <= m.Height; y++ { for x := 0; x <= m.Width; x++ { ret = ret + string(m.Field[Coordinate{X: x, Y: y}]) } ret = ret + "\n" } return ret }