diff --git a/2024/day04.go b/2024/day04.go index ee446d8..c9dbecf 100644 --- a/2024/day04.go +++ b/2024/day04.go @@ -40,7 +40,51 @@ func (d Day4) Part1(r io.Reader) string { } func (d Day4) Part2(r io.Reader) string { - return "" + wordsearch := make([][]rune, 0) + s := bufio.NewScanner(r) + var sum int + + for s.Scan() { + line := []rune(s.Text()) + wordsearch = append(wordsearch, line) + } + + s1 := make([]rune, 3) + s2 := make([]rune, 3) + for startx := range wordsearch { + for starty := range wordsearch[startx] { + + toptobottom := [][]int{ + {-1, -1}, + {0, 0}, + {1, 1}, + } + + for i, transpose := range toptobottom { + x, y := startx+transpose[0], starty+transpose[1] + s1[i] = runeAt(wordsearch, x, y) + } + + bottomtotop := [][]int{ + {-1, 1}, + {0, 0}, + {1, -1}, + } + + for i, transpose := range bottomtotop { + x, y := startx+transpose[0], starty+transpose[1] + s2[i] = runeAt(wordsearch, x, y) + + } + + if str1, str2 := string(s1), string(s2); (str1 == "SAM" || str1 == "MAS") && (str2 == "SAM" || str2 == "MAS") { + sum++ + } + + } + } + + return printi(sum) } func runeAt(r [][]rune, x, y int) rune { diff --git a/2024/puzzle_test.go b/2024/puzzle_test.go index a04e082..1567181 100644 --- a/2024/puzzle_test.go +++ b/2024/puzzle_test.go @@ -58,7 +58,7 @@ func TestPuzzles(t *testing.T) { { solver: Day4{}, ans1: "18", - ans2: "", + ans2: "9", inp1: `MMMSXXMASM MSAMXMSMSA AMXSXMAAMM @@ -69,6 +69,16 @@ SMSMSASXSS SAXAMASAAA MAMMMXMMMM MXMXAXMASX`, + inp2: `.M.S...... +..A..MSMS. +.M.S.MAA.. +..A.ASMSM. +.M.S.M.... +.......... +S.S.S.S.S. +.A.A.A.A.. +M.M.M.M.M. +..........`, }, }