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]
|
inputFile := os.Args[1]
|
||||||
|
|
||||||
part1, part2 := solution(inputFile)
|
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 {
|
type Rule struct {
|
||||||
@ -86,12 +86,63 @@ func solution(inputFile string) (int, int) {
|
|||||||
|
|
||||||
if validUpdate {
|
if validUpdate {
|
||||||
validSum += updatePages[len(updatePages)/2]
|
validSum += updatePages[len(updatePages)/2]
|
||||||
|
} else {
|
||||||
|
invalidSum += reorderedMid(updatePages, rules)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return validSum, invalidSum
|
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 {
|
func isValid(rules []Rule, left, right int) bool {
|
||||||
for _, rule := range rules {
|
for _, rule := range rules {
|
||||||
if rule.Left == right && rule.Right == left {
|
if rule.Left == right && rule.Right == left {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user