From 00f6e4344f3fd9ade1af7790e02b50cc9f15cdbf Mon Sep 17 00:00:00 2001 From: Niklas Date: Wed, 11 Dec 2024 07:27:01 +0100 Subject: [PATCH] Add Day11 --- src/main/kotlin/Day11.kt | 45 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 src/main/kotlin/Day11.kt diff --git a/src/main/kotlin/Day11.kt b/src/main/kotlin/Day11.kt new file mode 100644 index 0000000..cf6f17a --- /dev/null +++ b/src/main/kotlin/Day11.kt @@ -0,0 +1,45 @@ +import utils.AoCDay +import utils.isEven +import utils.splitAndMapToLong + +class Day11 : AoCDay() { + val stones = input.first().splitAndMapToLong() + + override fun part1(): Any { + return blink(25) + } + + override fun part2(): Any { + return blink(75) + } + + private fun blink(times: Int): Long { + var map = mutableMapOf() + stones.forEach { + map[it] = (map[it] ?: 0) + 1 + } + repeat(times) { + var newMap = mutableMapOf() + for ((number, amount) in map) { + if (number == 0L) { + newMap[1] = (newMap[1] ?: 0) + amount + } else if (number.toString().length.isEven()) { + val string = number.toString() + val half = string.length / 2 + val firstHalf = string.substring(0, half).toLong() + val secondHalf = string.substring(half).toLong() + newMap[firstHalf] = (newMap[firstHalf] ?: 0) + amount + newMap[secondHalf] = (newMap[secondHalf] ?: 0) + amount + } else { + newMap[number * 2024] = (newMap[number * 2024] ?: 0) + amount + } + } + map = newMap + } + return map.values.sum() + } +} + +fun main() { + Day11().execute() +}