Skip to content

Commit 64cc88e

Browse files
committed
2024.05 Part 2
1 parent b365176 commit 64cc88e

File tree

1 file changed

+33
-17
lines changed

1 file changed

+33
-17
lines changed

2024/5-printer/main.go

Lines changed: 33 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import (
44
"advent-of-code/util"
55
"bufio"
66
"fmt"
7-
"math/rand"
87
"strings"
98
)
109

@@ -36,20 +35,13 @@ func main() {
3635
ints := util.StringToInts(row, ",")
3736

3837
if isValidRow(ints, rules) {
39-
mid := int(len(ints) / 2)
38+
mid := len(ints) / 2
4039
result += ints[mid]
4140
} else {
42-
for {
43-
rand.Shuffle(len(ints), func(i, j int) {
44-
ints[i], ints[j] = ints[j], ints[i]
45-
})
46-
47-
if isValidRow(ints, rules) {
48-
mid := int(len(ints) / 2)
49-
invalidResult += ints[mid]
50-
break
51-
}
52-
}
41+
ints = fixInvalidRow(ints, rules)
42+
43+
mid := len(ints) / 2
44+
invalidResult += ints[mid]
5345
}
5446
}
5547

@@ -58,16 +50,16 @@ func main() {
5850
}
5951

6052
func isValidRow(ints []int, rules [][2]int) bool {
61-
update := map[int]int{}
53+
position := map[int]int{}
6254
for i := range ints {
63-
update[ints[i]] = i
55+
position[ints[i]] = i
6456
}
6557

6658
var pos1, pos2 int
6759
var ok1, ok2 bool
6860
for i := range rules {
69-
pos1, ok1 = update[rules[i][0]]
70-
pos2, ok2 = update[rules[i][1]]
61+
pos1, ok1 = position[rules[i][0]]
62+
pos2, ok2 = position[rules[i][1]]
7163

7264
if ok1 && ok2 && pos1 >= pos2 {
7365
return false
@@ -76,3 +68,27 @@ func isValidRow(ints []int, rules [][2]int) bool {
7668

7769
return true
7870
}
71+
72+
func fixInvalidRow(ints []int, rules [][2]int) []int {
73+
outer:
74+
for !isValidRow(ints, rules) {
75+
position := map[int]int{}
76+
for i := range ints {
77+
position[ints[i]] = i
78+
}
79+
80+
var pos1, pos2 int
81+
var ok1, ok2 bool
82+
for i := range rules {
83+
pos1, ok1 = position[rules[i][0]]
84+
pos2, ok2 = position[rules[i][1]]
85+
86+
if ok1 && ok2 && pos1 >= pos2 {
87+
ints[pos1], ints[pos2] = ints[pos2], ints[pos1]
88+
continue outer
89+
}
90+
}
91+
}
92+
93+
return ints
94+
}

0 commit comments

Comments
 (0)