aboutsummaryrefslogtreecommitdiff
path: root/aoc-2021-kotlin/src/Day07.kt
blob: 9c1b79f5fbc798ff0c3af3e1c8f6eb7cfa235fe9 (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
import kotlin.math.absoluteValue

object Day07 {
    fun part1(input: String): Int {
        val numbers = input.trim().split(",").map(String::toInt)
        val range = numbers.minOrNull()!!..numbers.maxOrNull()!!

        return range.minOf { n -> numbers.sumOf { (it - n).absoluteValue } }
    }

    fun part2(input: String): Int {
        val numbers = input.trim().split(",").map(String::toInt)
        val range = numbers.minOrNull()!!..numbers.maxOrNull()!!

        return range.minOf { n -> numbers.map { (it - n).absoluteValue }.sumOf { (it * (it + 1)) / 2 } }
    }
}

fun main() {
    val testInput = readInputAsString("Day07_test")
    check(Day07.part1(testInput) == 37)
    check(Day07.part2(testInput) == 168)

    val input = readInputAsString("Day07")
    println(Day07.part1(input))
    println(Day07.part2(input))
}