aboutsummaryrefslogtreecommitdiff
path: root/ride/climb.go
diff options
context:
space:
mode:
Diffstat (limited to 'ride/climb.go')
-rw-r--r--ride/climb.go9
1 files changed, 7 insertions, 2 deletions
diff --git a/ride/climb.go b/ride/climb.go
index f42a9a2..647cf9a 100644
--- a/ride/climb.go
+++ b/ride/climb.go
@@ -270,12 +270,17 @@ func isValidClaim(claim Range, routeLen int) bool {
// freeRegions returns the maximal sub-ranges of [rStart, rEnd] that are not
// covered by any claimed range, after discarding claims that fall outside.
func freeRegions(rStart, rEnd int, claimed []Range) []Range {
- regions := make([]Range, 0, len(claimed)+1)
- current := rStart
+ valid := make([]Range, 0, len(claimed))
for _, claim := range claimed {
if !isValidClaim(claim, rEnd+1) {
continue
}
+ valid = append(valid, claim)
+ }
+ slices.SortFunc(valid, func(a, b Range) int { return a.Start - b.Start })
+ regions := make([]Range, 0, len(valid)+1)
+ current := rStart
+ for _, claim := range valid {
if claim.End < current {
continue
}