47 lines
853 B
Go
47 lines
853 B
Go
|
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
|
||
|
}
|