83 lines
1.6 KiB
Go
83 lines
1.6 KiB
Go
package main
|
|
|
|
import (
|
|
"github.com/StevanFreeborn/advent-of-code-2025/internal/file"
|
|
)
|
|
|
|
const PaperRollCharacter = "@"
|
|
const EmptyCharacter = "."
|
|
|
|
type move struct {
|
|
NumberOfRows int
|
|
NumberOfColumns int
|
|
}
|
|
|
|
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 moves = []move{
|
|
up,
|
|
down,
|
|
right,
|
|
left,
|
|
upRight,
|
|
upLeft,
|
|
downRight,
|
|
downLeft,
|
|
}
|
|
|
|
func SolvePartOne(filePath string) int {
|
|
input := file.ReadAllLines(filePath)
|
|
numberOfRows := len(input)
|
|
numberOfColumns := len(input[0])
|
|
|
|
total := 0
|
|
|
|
for row := range numberOfRows {
|
|
for column := range numberOfColumns {
|
|
value := string(input[row][column])
|
|
|
|
if value != PaperRollCharacter {
|
|
continue
|
|
}
|
|
|
|
numberOfPaperRolls := 0
|
|
|
|
for _, move := range moves {
|
|
neighborRow := row + move.NumberOfRows
|
|
neighborColumn := column + move.NumberOfColumns
|
|
|
|
if neighborRow > numberOfRows-1 || neighborRow < 0 {
|
|
continue
|
|
}
|
|
|
|
if neighborColumn > numberOfColumns-1 || neighborColumn < 0 {
|
|
continue
|
|
}
|
|
|
|
neighborValue := string(input[neighborRow][neighborColumn])
|
|
|
|
if neighborValue != PaperRollCharacter {
|
|
continue
|
|
}
|
|
|
|
numberOfPaperRolls++
|
|
}
|
|
|
|
if numberOfPaperRolls < 4 {
|
|
total++
|
|
}
|
|
}
|
|
}
|
|
|
|
return total
|
|
}
|