You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
881 B
56 lines
881 B
package adventoc2024
|
|
|
|
import (
|
|
"bufio"
|
|
"io"
|
|
)
|
|
|
|
type Day4 struct{}
|
|
|
|
func (d Day4) Part1(r io.Reader) string {
|
|
wordsearch := make([][]rune, 0)
|
|
s := bufio.NewScanner(r)
|
|
var sum int
|
|
|
|
for s.Scan() {
|
|
line := []rune(s.Text())
|
|
wordsearch = append(wordsearch, line)
|
|
}
|
|
|
|
search := make([]rune, 4)
|
|
for startx := range wordsearch {
|
|
for starty := range wordsearch[startx] {
|
|
for dx := -1; dx < 2; dx++ {
|
|
for dy := -1; dy < 2; dy++ {
|
|
for i := 0; i < 4; i++ {
|
|
x := startx + dx*i
|
|
y := starty + dy*i
|
|
search[i] = runeAt(wordsearch, x, y)
|
|
}
|
|
if string(search) == "XMAS" {
|
|
sum++
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
return printi(sum)
|
|
}
|
|
|
|
func (d Day4) Part2(r io.Reader) string {
|
|
return ""
|
|
}
|
|
|
|
func runeAt(r [][]rune, x, y int) rune {
|
|
if x >= len(r) || x < 0 {
|
|
return rune(0)
|
|
}
|
|
|
|
if y >= len(r[x]) || y < 0 {
|
|
return rune(0)
|
|
}
|
|
|
|
return r[x][y]
|
|
}
|
|
|