aboutsummaryrefslogtreecommitdiff
path: root/2021-kotlin/src/Day11.kt
diff options
context:
space:
mode:
Diffstat (limited to '2021-kotlin/src/Day11.kt')
-rw-r--r--2021-kotlin/src/Day11.kt48
1 files changed, 0 insertions, 48 deletions
diff --git a/2021-kotlin/src/Day11.kt b/2021-kotlin/src/Day11.kt
deleted file mode 100644
index db56d61..0000000
--- a/2021-kotlin/src/Day11.kt
+++ /dev/null
@@ -1,48 +0,0 @@
-object Day11 {
- private fun flashSequence(input: Map<Pos2D, Int>) = sequence {
- val map = input.toMutableMap()
-
- while (true) {
- val flashed = mutableSetOf<Pos2D>()
- fun canFlash(entry: Map.Entry<Pos2D, Int>): Boolean = entry.value > 9 && !flashed.contains(entry.key)
-
- // 1)
- map.forEach { (pos, energy) -> map[pos] = energy + 1 }
-
- // 2)
- while (map.any(::canFlash)) {
- map
- .filter(::canFlash)
- .forEach { (pos, _) ->
- flashed.add(pos)
- Pos2D.directions8.map { pos + it }.forEach {
- if (map.containsKey(it)) {
- map[it] = map[it]!! + 1
- }
- }
- }
- }
-
- // 3)
- flashed.forEach { map[it] = 0 }
-
- yield(flashed.size)
- }
- }
-
- fun bothParts(input: List<String>) = flashSequence(parseToMap(input)).let { seq ->
- seq.take(100).sum() to seq.indexOfFirst { it == 100 } + 1
- }
-}
-
-fun main() {
- val testInput = readInputAsLines("Day11_test")
- val testOutput = Day11.bothParts(testInput)
- check(testOutput.first == 1656)
- check(testOutput.second == 195)
-
- val input = readInputAsLines("Day11")
- val output = Day11.bothParts(input)
- println(output.first)
- println(output.second)
-}