aboutsummaryrefslogtreecommitdiff
path: root/src/Day06.kt
blob: 57e56f2e78e507668be39adfd7c17f8b81f6a2e9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
fun calculateFishPopulation(input: String, days: Int): Long {
    val fishCounts =
        input
            .trim()
            .split(",")
            .map(String::toInt)
            .groupingBy { it }
            .eachCount()
            .mapValues { (_, v) -> v.toLong() }
            .toMutableMap()

    repeat(days) {
        val readyToBirth = fishCounts.getOrDefault(0, 0)
        repeat(8) {
            fishCounts[it] = fishCounts.getOrDefault(it + 1, 0)
        }
        fishCounts.merge(6, readyToBirth, Long::plus)
        fishCounts[8] = readyToBirth
    }

    return fishCounts.values.sum()
}

fun main() {
    fun part1(input: String): Int = calculateFishPopulation(input, 80).toInt()

    fun part2(input: String): Long = calculateFishPopulation(input, 256)

    val testInput = readInputAsString("Day06_test")
    check(part1(testInput) == 5934)
    check(part2(testInput) == 26984457539)

    val input = readInputAsString("Day06")
    println(part1(input))
    println(part2(input))
}