

Because you’re just sorting integers and in a single pass, the a == b and a > b distinction doesn’t actually matter here, so the cmp can very simply be is a|b in rules
, no map needed.
Edit: I realise it would be a sidegrade for your case because of how you did P1, just thought it was an interesting insight, especially for those that did P1 by checking if the input was sorted using the same custom compare.
func solution(input string) (int, int) {
// rules: ["a|b", ...]
// updates: [[1, 2, 3, 4], ...]
var rules, updates = parse(input)
sortFunc := func(a int, b int) int {
if slices.Contains(rules, strconv.Itoa(a)+"|"+strconv.Itoa(b)) {
return -1
}
return 1
}
var sumOrdered = 0
var sumUnordered = 0
for _, update := range updates {
if slices.IsSortedFunc(update, sortFunc) {
sumOrdered += update[len(update)/2]
} else {
slices.SortStableFunc(update, sortFunc)
sumUnordered += update[len(update)/2]
}
}
return sumOrdered, sumUnordered
}
Hmmmmm, that sure does sound like a bug