1
0

Day03 2021

This commit is contained in:
Hubert Van De Walle 2021-12-03 12:35:01 +01:00
parent 811a6a0af0
commit 782fccc572
3 changed files with 1061 additions and 0 deletions

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
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,24 @@
package be.vandewalleh.aoc.days
class Day03Test : BaseDayTest(3) {
override val example = """
00100
11110
10110
10111
10101
01111
00111
11100
10000
11001
00010
01010
""".trimIndent()
override val part1Example = 198
override val part2Example = 230
override val part1Answer = 3277364
override val part2Answer = 5736383
}