day05 update
This commit is contained in:
@@ -33,33 +33,15 @@ class Day05 {
|
||||
return true
|
||||
}
|
||||
|
||||
fun fixOrder(rules: HashMap<Int, List<Int>>, update: List<Int>): List<Int> {
|
||||
var modUpdate = update.toMutableList()
|
||||
for (i in 0..<update.count()) {
|
||||
val curPage = modUpdate[i]
|
||||
val curRule = rules[curPage]
|
||||
if (curRule == null) { continue }
|
||||
for (pre in 0..<i) {
|
||||
if (curRule.contains(modUpdate[pre])) {
|
||||
modUpdate[i] = modUpdate[pre]
|
||||
modUpdate[pre] = curPage
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
// hate this but im lazy
|
||||
if (!checkOrder(rules, modUpdate)) {
|
||||
modUpdate = fixOrder(rules, modUpdate).toMutableList()
|
||||
}
|
||||
return modUpdate
|
||||
}
|
||||
|
||||
fun part2(input: String): Int {
|
||||
val (rules, updates) = parse(input)
|
||||
return updates.filter {update -> !checkOrder(rules, update) }
|
||||
.map { update -> fixOrder(rules, update) }
|
||||
.map { update -> update[update.count() / 2] }
|
||||
.sum()
|
||||
.flatMap { update ->
|
||||
update.filter { curPage ->
|
||||
rules[curPage]?.filter { update.contains(it) }?.count() == update.count() / 2
|
||||
}
|
||||
}
|
||||
.sum()
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user