1
0
Files
Advent-of-Code/2021/src/main/kotlin/Day03.kt
T
2021-12-03 12:46:09 +01:00

37 lines
1.3 KiB
Kotlin

package be.vandewalleh.aoc.days
import be.vandewalleh.aoc.utils.BaseDay
import be.vandewalleh.aoc.utils.input.Day
@Day
class Day03 : BaseDay() {
override fun part1(): Int {
val moreOnes = input.lines.value[0].indices
.map { i -> input.lines.value.map { it[i] } }
.map { it.count { it == '1' } >= it.size / 2 }
val gamma = moreOnes.joinToString("") { if (it) "1" else "0" }.toInt(radix = 2)
val epsilon = moreOnes.joinToString("") { if (!it) "1" else "0" }.toInt(radix = 2)
return gamma * epsilon
}
override fun part2(): Any {
val o2 = findNumber(input.lines.value) { ones, zeros -> if (ones >= zeros) '1' else '0' }
val co2 = findNumber(input.lines.value) { ones, zeros -> if (zeros <= ones) '0' else '1' }
return o2 * co2
}
private fun findNumber(input: List<String>, keep: (Int, Int) -> Char): Int {
var numbers = input
for (i in this.input.lines.value[0].indices) {
if (numbers.size == 1) break
val eachCount = numbers.map { it[i] }.groupingBy { it }.eachCount()
val ones = eachCount['1'] ?: 0
val zeros = eachCount['0'] ?: 0
val maj = keep(ones, zeros)
numbers = numbers.filter { it[i] == maj }
}
return numbers[0].toInt(2)
}
}