diff --git a/src/Day01.kt b/src/Day01.kt index dd8845a..c815cdb 100644 --- a/src/Day01.kt +++ b/src/Day01.kt @@ -1,44 +1,47 @@ -fun parseInput(inputType: String): Pair, MutableList> = - readInput(1, inputType).fold(mutableListOf() to mutableListOf()) { (left, right), line -> - val nums = line.split(Regex("\\s+")) +class Day01( + inputType: String, +) : Day() { + private val left: MutableList + private val right: MutableList - left.add(nums[0].toInt()) - right.add(nums[1].toInt()) + init { + val (left, right) = + readInput( + 1, + inputType, + ).fold(mutableListOf() to mutableListOf()) { (left, right), line -> + val nums = line.split(Regex("\\s+")) - left to right + left.add(nums[0].toInt()) + right.add(nums[1].toInt()) + + left to right + } + + this.left = left + this.right = right } -fun precompute(input: Pair, MutableList>) { - input.first.sort() - input.second.sort() -} - -fun part1(input: Pair, List>): Int = - input.first.zip(input.second).sumOf { (l, r) -> maxOf(l - r, r - l) } - -fun part2(input: Pair, List>): Int { - val (left, right) = input - val freqs = buildMap { - right.forEach { it -> - put(it, 1 + getOrDefault(it, 0)) - } + override fun precompute() { + left.sort() + right.sort() } - return left.sumOf { it -> it * freqs.getOrDefault(it, 0) } + override fun part1(): Int = left.zip(right).sumOf { (l, r) -> maxOf(l - r, r - l) } + + override fun part2(): Int { + val freqs = + buildMap { + right.forEach { it -> + put(it, 1 + getOrDefault(it, 0)) + } + } + + return left.sumOf { it -> it * freqs.getOrDefault(it, 0) } + } } fun main() { - // Test of sample - val testInput = parseInput("sample") - precompute(testInput) - - check(part1(testInput) == 11) - check(part2(testInput) == 31) - - // Challenge input - val input = parseInput("input") - precompute(input) - - part1(input).println() - part2(input).println() + Day01("sample").test(11, 31) + Day01("input").run() }