Skip to content

Commit a2225e8

Browse files
committed
Day04
1 parent 0bff3ac commit a2225e8

File tree

4 files changed

+200
-0
lines changed

4 files changed

+200
-0
lines changed

src/main/kotlin/Day04.kt

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
class Day04 : Day {
2+
override fun partOne(filename: String, verbose: Boolean): Any {
3+
val diagram = filename.asPath().parseMatrix()
4+
5+
val reachableCoordinates = mutableSetOf<Coordinate>()
6+
diagram.forEachIndexed { coordinate, char ->
7+
val neighbors = diagram.getAllNeighbors(coordinate)
8+
val reachable = neighbors.count { diagram[it] == '@' } < 4
9+
if (char == '@' && reachable) {
10+
reachableCoordinates += coordinate
11+
}
12+
}
13+
14+
if (verbose) {
15+
diagram.print { it in reachableCoordinates }
16+
}
17+
return reachableCoordinates.count()
18+
}
19+
20+
override fun partTwo(filename: String, verbose: Boolean): Any {
21+
val diagram = filename.asPath().parseMatrix()
22+
val removed = mutableSetOf<Coordinate>()
23+
do {
24+
var changed = false
25+
diagram.forEachIndexed { coordinate, char ->
26+
val neighbors = diagram.getAllNeighbors(coordinate)
27+
val reachable = neighbors.count { diagram[it] == '@' } < 4
28+
if (char == '@' && reachable) {
29+
diagram[coordinate] = '.'
30+
removed += coordinate
31+
changed = true
32+
}
33+
}
34+
} while (changed)
35+
36+
if (verbose) {
37+
diagram.print { it in removed }
38+
}
39+
return removed.count()
40+
}
41+
42+
companion object : Day.Main("Day04.txt") {
43+
@JvmStatic
44+
fun main(args: Array<String>) = main()
45+
}
46+
}

0 commit comments

Comments
 (0)