diff options
author | tchojnacki <tomaszchojnacki2001@gmail.com> | 2021-12-06 09:34:30 +0100 |
---|---|---|
committer | tchojnacki <tomaszchojnacki2001@gmail.com> | 2021-12-06 09:34:30 +0100 |
commit | 8f84c868b8d65b714447155b301acc6db4e992b2 (patch) | |
tree | 0230ab81c75cb5dffdab26d79fbdfb4aedfd7dd3 /src | |
parent | 803778486227cc337aec207b90e63e53968244e5 (diff) | |
download | gleam_aoc2020-8f84c868b8d65b714447155b301acc6db4e992b2.tar.gz gleam_aoc2020-8f84c868b8d65b714447155b301acc6db4e992b2.zip |
Initial day 6 solution
Diffstat (limited to 'src')
-rw-r--r-- | src/Day06.kt | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/src/Day06.kt b/src/Day06.kt new file mode 100644 index 0000000..d192c72 --- /dev/null +++ b/src/Day06.kt @@ -0,0 +1,58 @@ +fun main() { + fun part1(input: String): Int { + var fish = input.trim().split(",").map(String::toInt) + + repeat(80) { + val pendingFish = mutableListOf<Int>() + + fish = fish.map { + when (it) { + 0 -> { + pendingFish.add(8) + 6 + } + else -> { + it - 1 + } + } + } + pendingFish + } + + return fish.size + } + + fun part2(input: String): Long { + val fishCounts = + input + .trim() + .split(",") + .map(String::toInt) + .groupingBy { it } + .eachCount() + .mapValues { (_, v) -> v.toLong() } + .toMutableMap() + + repeat(256) { + val readyToBirth = fishCounts.getOrDefault(0, 0) + fishCounts[0] = fishCounts.getOrDefault(1, 0) + fishCounts[1] = fishCounts.getOrDefault(2, 0) + fishCounts[2] = fishCounts.getOrDefault(3, 0) + fishCounts[3] = fishCounts.getOrDefault(4, 0) + fishCounts[4] = fishCounts.getOrDefault(5, 0) + fishCounts[5] = fishCounts.getOrDefault(6, 0) + fishCounts[6] = fishCounts.getOrDefault(7, 0) + readyToBirth + fishCounts[7] = fishCounts.getOrDefault(8, 0) + fishCounts[8] = readyToBirth + } + + return fishCounts.values.sum() + } + + val testInput = readInputAsString("Day06_test") + check(part1(testInput) == 5934) + check(part2(testInput) == 26984457539) + + val input = readInputAsString("Day06") + println(part1(input)) + println(part2(input)) +} |