diff --git a/internal/grid/grid.go b/internal/grid/grid.go new file mode 100644 index 0000000..3c07a5f --- /dev/null +++ b/internal/grid/grid.go @@ -0,0 +1,104 @@ +package grid + +type Grid interface { + Positions() map[Position]string + Walk() +} + +type grid struct { + positions map[Position]string +} + +func NewGrid(input []string) Grid { + numberOfRows := len(input) + numberOfColumns := len(input[0]) + positions := map[Position]string{} + + for row := range numberOfRows { + for column := range numberOfColumns { + value := string(input[row][column]) + pos := NewPosition(row, column) + positions[pos] = value + } + } + + return grid{ + positions: positions, + } +} + +func (g grid) Positions() map[Position]string { + positions := map[Position]string{} + + for key, value := range g.positions { + newPosition := NewPosition(key.Row(), key.Column()) + positions[newPosition] = value + } + + return positions +} + +type Position interface { + Column() int + Row() int +} + +type position struct { + column int + row int +} + +func NewPosition(row int, column int) Position { + return position{ + row: row, + column: column, + } +} + +func (p position) Row() int { + return p.row +} + +func (p position) Column() int { + return p.column +} + +type Move interface { + NumberOfRows() int + NumberOfColumns() int +} + +type move struct { + numberOfRows int + numberOfColumns int +} + +func (m move) NumberOfRows() int { + return m.numberOfColumns +} + +func (m move) NumberOfColumns() int { + return m.numberOfColumns +} + +var ( + Up = move{numberOfRows: -1, numberOfColumns: 0} + Down = move{numberOfRows: 1, numberOfColumns: 0} + Right = move{numberOfRows: 0, numberOfColumns: 1} + Left = move{numberOfRows: 0, numberOfColumns: -1} + UpRight = move{numberOfRows: -1, numberOfColumns: 1} + UpLeft = move{numberOfRows: -1, numberOfColumns: -1} + DownRight = move{numberOfRows: 1, numberOfColumns: 1} + DownLeft = move{numberOfRows: 1, numberOfColumns: -1} +) + +var AllMoves = []Move{ + Up, + Down, + Right, + Left, + UpRight, + UpLeft, + DownRight, + DownLeft, +} diff --git a/internal/grid/grid.txt b/internal/grid/grid.txt new file mode 100644 index 0000000..c24e925 --- /dev/null +++ b/internal/grid/grid.txt @@ -0,0 +1,10 @@ +.......... +.......... +.......... +.......... +.......... +.......... +.......... +.......... +.......... +.......... diff --git a/internal/grid/grid_test.go b/internal/grid/grid_test.go new file mode 100644 index 0000000..06fe566 --- /dev/null +++ b/internal/grid/grid_test.go @@ -0,0 +1 @@ +package grid_test