• 0 Posts
  • 215 Comments
Joined 1 year ago
cake
Cake day: August 9th, 2023

help-circle
















  • 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
    }