From 3065fc39660f955b0bd0cdeffa9867208e5e9617 Mon Sep 17 00:00:00 2001 From: Michael Bobbitt Date: Fri, 20 Dec 2024 00:04:04 -0500 Subject: [PATCH] day5 part2 completed --- day5/main.go | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 53 insertions(+), 2 deletions(-) diff --git a/day5/main.go b/day5/main.go index c04858c..cf3cd12 100644 --- a/day5/main.go +++ b/day5/main.go @@ -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 {