1
0

Day03 2021

This commit is contained in:
2021-12-03 12:35:01 +01:00
parent 811a6a0af0
commit 782fccc572
3 changed files with 1061 additions and 0 deletions
+37
View File
@@ -0,0 +1,37 @@
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 oxygenNumbers = findNumber(input.lines.value) { ones, zeros -> if (ones >= zeros) '1' else '0' }
val co2Numbers = findNumber(input.lines.value) { ones, zeros -> if (zeros <= ones) '0' else '1' }
return oxygenNumbers[0].toInt(2) * co2Numbers[0].toInt(2)
}
private fun findNumber(input: List<String>, keep: (Int, Int) -> Char): List<String> {
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
}
}