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