Skip to content

Commit cceb546

Browse files
committed
2024.05 - bogus sort
1 parent f632730 commit cceb546

File tree

1 file changed

+37
-21
lines changed

1 file changed

+37
-21
lines changed

2024/5-printer/main.go

Lines changed: 37 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"advent-of-code/util"
55
"bufio"
66
"fmt"
7+
"math/rand"
78
"strings"
89
)
910

@@ -29,34 +30,49 @@ func main() {
2930
})
3031
}
3132

32-
var result int
33-
var update map[int]int
33+
var result, invalidResult int
3434
for scan.Scan() {
35-
valid := true
35+
row := scan.Text()
36+
ints := util.StringToInts(row, ",")
3637

37-
parts = strings.Split(scan.Text(), ",")
38-
update = map[int]int{}
39-
for i := range parts {
40-
update[util.MustAtoi(parts[i])] = i
41-
}
42-
43-
var pos1, pos2 int
44-
var ok1, ok2 bool
45-
for i := range rules {
46-
pos1, ok1 = update[rules[i][0]]
47-
pos2, ok2 = update[rules[i][1]]
38+
if isValidRow(ints, rules) {
39+
mid := int(len(ints) / 2)
40+
result += ints[mid]
41+
} else {
42+
for {
43+
rand.Shuffle(len(ints), func(i, j int) {
44+
ints[i], ints[j] = ints[j], ints[i]
45+
})
4846

49-
if ok1 && ok2 && pos1 >= pos2 {
50-
valid = false
51-
break
47+
if isValidRow(ints, rules) {
48+
mid := int(len(ints) / 2)
49+
invalidResult += ints[mid]
50+
break
51+
}
5252
}
5353
}
54+
}
55+
56+
fmt.Println(result)
57+
fmt.Println(invalidResult)
58+
}
59+
60+
func isValidRow(ints []int, rules [][2]int) bool {
61+
update := map[int]int{}
62+
for i := range ints {
63+
update[ints[i]] = i
64+
}
5465

55-
if valid {
56-
mid := int(len(parts) / 2)
57-
result += util.MustAtoi(parts[mid])
66+
var pos1, pos2 int
67+
var ok1, ok2 bool
68+
for i := range rules {
69+
pos1, ok1 = update[rules[i][0]]
70+
pos2, ok2 = update[rules[i][1]]
71+
72+
if ok1 && ok2 && pos1 >= pos2 {
73+
return false
5874
}
5975
}
6076

61-
fmt.Println(result)
77+
return true
6278
}

0 commit comments

Comments
 (0)