Day 4 Part 2

This commit is contained in:
Sven Weidauer 2024-12-07 22:12:44 +01:00
parent 6f7fc2d1a8
commit 6e18c4a72d

View file

@ -3,12 +3,33 @@ fun main() {
val part1 = grid.all().fold(0) { acc, line -> val part1 = grid.all().fold(0) { acc, line ->
val string = line.joinToString(separator = "") val string = line.joinToString(separator = "")
println(string)
acc + string.countSubstring("XMAS") + string.countSubstring("SAMX") acc + string.countSubstring("XMAS") + string.countSubstring("SAMX")
} }
println("Part 1: $part1") println("Part 1: $part1")
var part2 = 0
for (y in 1..<(grid.height - 1)) {
val row = grid.rows[y]
part2 += row.indices.filter { it > 0 && it < grid.width - 1 && row[it] == 'A' }
.count { grid.xmasAt(it, y) }
}
println("Part 2: $part2")
}
fun Grid.xmasAt(x: Int, y: Int): Boolean {
assert(get(x, y) == 'A')
val tl = get(x - 1, y - 1)
val tr = get(x + 1, y - 1)
val bl = get(x - 1, y + 1)
val br = get(x + 1, y + 1)
val d1 = (tl == 'M' && br == 'S') || (tl == 'S' && br == 'M')
val d2 = (bl == 'M' && tr == 'S') || (bl == 'S' && tr == 'M')
return d1 && d2
} }
fun String.countSubstring(substring: String): Int { fun String.countSubstring(substring: String): Int {