Day03 2021
This commit is contained in:
parent
811a6a0af0
commit
782fccc572
37
2021/src/main/kotlin/Day03.kt
Normal file
37
2021/src/main/kotlin/Day03.kt
Normal 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
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
1000
2021/src/main/resources/day03.txt
Normal file
1000
2021/src/main/resources/day03.txt
Normal file
File diff suppressed because it is too large
Load Diff
24
2021/src/test/kotlin/Day03Test.kt
Normal file
24
2021/src/test/kotlin/Day03Test.kt
Normal 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
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user