6 "adventofcode2023/utils"
9 type Grid[T any] struct {
15 func NewGrid[T any](sizeX, sizeY int, empty T) *Grid[T] {
16 matrix := make([][]T, sizeY)
17 rows := make([]T, sizeX*sizeY)
18 for i := 0; i < sizeX*sizeY; i++ {
23 for i := 0; i < sizeY; i++ {
24 matrix[i] = rows[j : j+sizeX : j+sizeX]
35 func (g *Grid[T]) SizeX() int {
39 func (g *Grid[T]) SizeY() int {
43 func (g *Grid[T]) Get(x, y int) T {
44 if x < 0 || x >= g.sizeX {
47 if y < 0 || y >= g.sizeY {
53 func (g *Grid[T]) Set(x, y int, v T) {
54 if x < 0 || x >= g.sizeX {
57 if y < 0 || y >= g.sizeY {
63 func (g *Grid[T]) StringWithFormatter(formatter func(T, int, int) string) string {
65 for j := 0; j < g.sizeY; j++ {
66 for i := 0; i < g.sizeX; i++ {
67 _, err := r.WriteString(formatter(g.matrix[j][i], i, j))
70 _, err := r.WriteRune('\n')