Add solution for Day 3
This commit is contained in:
parent
624d8945ca
commit
da07259e12
1 changed files with 53 additions and 0 deletions
53
src/Day03.kt
Normal file
53
src/Day03.kt
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
fun main() {
|
||||||
|
fun part1(input: List<String>): Int {
|
||||||
|
var priority = 0
|
||||||
|
input.forEach { ruckSack ->
|
||||||
|
val compartment1 = ruckSack.slice(0 until ruckSack.length / 2).toSet()
|
||||||
|
val compartment2 = ruckSack.slice(ruckSack.length / 2 until ruckSack.length).toSet()
|
||||||
|
var duplicate: Char? = null
|
||||||
|
for (item in compartment1) {
|
||||||
|
if (compartment2.contains(item)) {
|
||||||
|
duplicate = item
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
duplicate?.let {
|
||||||
|
priority += it.priority()
|
||||||
|
}?: throw IllegalStateException("No duplicates found in rucksacks")
|
||||||
|
}
|
||||||
|
return priority
|
||||||
|
}
|
||||||
|
|
||||||
|
fun part2(input: List<String>): Int {
|
||||||
|
var priority = 0
|
||||||
|
val group = mutableListOf<Set<Char>>()
|
||||||
|
input.forEach { ruckSack ->
|
||||||
|
group.add(ruckSack.toSet())
|
||||||
|
if (group.size != 3) {
|
||||||
|
return@forEach
|
||||||
|
}
|
||||||
|
for (item in group.first()) {
|
||||||
|
if (group[1].contains(item) && group[2].contains(item)) {
|
||||||
|
priority += item.priority()
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
group.clear()
|
||||||
|
}
|
||||||
|
return priority
|
||||||
|
}
|
||||||
|
|
||||||
|
val testInput = readInput("Day03_test")
|
||||||
|
check(part1(testInput) == 157)
|
||||||
|
check(part2(testInput) == 70)
|
||||||
|
|
||||||
|
val input = readInput("Day03")
|
||||||
|
println(part1(input))
|
||||||
|
println(part2(input))
|
||||||
|
}
|
||||||
|
|
||||||
|
fun Char.priority(): Int = when(code) {
|
||||||
|
in 65..90 -> code - 38
|
||||||
|
in 97..122 -> code - 96
|
||||||
|
else -> throw IllegalArgumentException("Invalid item")
|
||||||
|
}
|
Loading…
Reference in a new issue