From 0f1e145b80813ae2331b7dac5ace0c589654ad2a Mon Sep 17 00:00:00 2001 From: tchojnacki Date: Thu, 11 Aug 2022 19:24:23 +0200 Subject: Move subproject to avoid IntelliJ module name issues --- aoc-2021-kotlin/src/Day09.kt | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 aoc-2021-kotlin/src/Day09.kt (limited to 'aoc-2021-kotlin/src/Day09.kt') diff --git a/aoc-2021-kotlin/src/Day09.kt b/aoc-2021-kotlin/src/Day09.kt new file mode 100644 index 0000000..9d0c41d --- /dev/null +++ b/aoc-2021-kotlin/src/Day09.kt @@ -0,0 +1,40 @@ +object Day09 { + private fun Map.getLowPoints() = + filter { (pos, num) -> Pos2D.directions4.all { num < getOrDefault(pos + it, 9) } } + + fun part1(input: List) = + parseToMap(input).getLowPoints().values.sumOf { it + 1 } + + fun part2(input: List): Int { + val map = parseToMap(input) + + fun traverseBasin(pos: Pos2D, acc: MutableSet) { + acc.add(pos) + Pos2D.directions4 + .map { pos + it } + .filter { !acc.contains(it) && map.getOrDefault(it, 9) < 9 } + .forEach { traverseBasin(it, acc) } + } + + return map + .getLowPoints() + .map { + val visited = mutableSetOf() + traverseBasin(it.key, visited) + visited.size + } + .sortedDescending() + .take(3) + .sum() + } +} + +fun main() { + val testInput = readInputAsLines("Day09_test") + check(Day09.part1(testInput) == 15) + check(Day09.part2(testInput) == 1134) + + val input = readInputAsLines("Day09") + println(Day09.part1(input)) + println(Day09.part2(input)) +} -- cgit v1.2.3