day05 update
This commit is contained in:
@@ -33,32 +33,14 @@ class Day05 {
|
|||||||
return true
|
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 {
|
fun part2(input: String): Int {
|
||||||
val (rules, updates) = parse(input)
|
val (rules, updates) = parse(input)
|
||||||
return updates.filter {update -> !checkOrder(rules, update) }
|
return updates.filter {update -> !checkOrder(rules, update) }
|
||||||
.map { update -> fixOrder(rules, update) }
|
.flatMap { update ->
|
||||||
.map { update -> update[update.count() / 2] }
|
update.filter { curPage ->
|
||||||
|
rules[curPage]?.filter { update.contains(it) }?.count() == update.count() / 2
|
||||||
|
}
|
||||||
|
}
|
||||||
.sum()
|
.sum()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user