day5 part2 completed

This commit is contained in:
Michael Bobbitt 2024-12-20 00:04:04 -05:00
parent e51c8425e5
commit 3065fc3966

View File

@ -14,7 +14,7 @@ func main() {
inputFile := os.Args[1]
part1, part2 := solution(inputFile)
fmt.Printf("(%s) Part 1: %d\n(%s) Part 2: %d\n:", inputFile, part1, inputFile, part2)
fmt.Printf("(%s) Part 1: %d\n(%s) Part 2: %d\n", inputFile, part1, inputFile, part2)
}
type Rule struct {
@ -86,12 +86,63 @@ func solution(inputFile string) (int, int) {
if validUpdate {
validSum += updatePages[len(updatePages)/2]
} else {
invalidSum += reorderedMid(updatePages, rules)
}
}
return validSum, invalidSum
}
func reorderedMid(pages []int, rules []Rule) int {
corrected := false
for !corrected {
for i := 0; i < len(pages); i++ {
for j := 1; j < len(pages); j++ {
if i == j {
continue
}
if i < j {
valid := isValid(rules, pages[i], pages[j])
if !valid {
pages[i], pages[j] = pages[j], pages[i]
}
} else {
valid := isValid(rules, pages[j], pages[i])
if !valid {
pages[i], pages[j] = pages[j], pages[i]
}
}
}
}
corrected = wasCorrected(pages, rules)
}
fmt.Printf("Corrected %v\n", pages)
return pages[len(pages)/2]
}
func wasCorrected(pages []int, rules []Rule) bool {
for i := 0; i < len(pages); i++ {
for j := 1; j < len(pages); j++ {
if i == j {
continue
}
if i < j {
valid := isValid(rules, pages[i], pages[j])
if !valid {
return false
}
} else {
valid := isValid(rules, pages[j], pages[i])
if !valid {
return false
}
}
}
}
return true
}
func isValid(rules []Rule, left, right int) bool {
for _, rule := range rules {
if rule.Left == right && rule.Right == left {