day5 part2 completed
This commit is contained in:
parent
e51c8425e5
commit
3065fc3966
55
day5/main.go
55
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 {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user