diff --git a/2019/1/day1.kt b/2019/1/day1.kt new file mode 100644 index 0000000..bfda102 --- /dev/null +++ b/2019/1/day1.kt @@ -0,0 +1,23 @@ +package moe.kageru.aoc + +fun main() { + val input = generateSequence(::readLine) + .map { it.toLong() } + .toList(); + println("Part 1: ${part1(input)}") + println("Part 2: ${part2(input)}") +} + +fun part1(numbers: List): Long = numbers.map(::cost).sum() + +fun part2(numbers: List): Long = numbers.map { costRec(it, 0) }.sum() + +fun cost(mass: Long): Long = (mass / 3) - 2 + +tailrec fun costRec(mass: Long, acc: Long): Long { + val cost = cost(mass) + return when { + cost <= 0 -> acc + else -> costRec(cost, acc + cost) + } +}