package day19 import ( "sort" ) func merge(intervals [][]int) [][]int { const start, end = 0, 1 var merged [][]int if len(intervals) > 1 { sort.Slice(intervals, func(i, j int) bool { return intervals[i][start] < intervals[j][start] }) } for _, interval := range intervals { last := len(merged) - 1 if last < 0 || interval[start] > merged[last][end] { merged = append(merged, []int{start: interval[start], end: interval[end]}, ) } else if interval[end] > merged[last][end] { merged[last][end] = interval[end] } } return merged[:len(merged):len(merged)] } func applyLessThan(intervals [][]int, n int) [][]int { var lessers [][]int for _, interval := range intervals { from := interval[0] if from >= n { continue } lessers = append(lessers, []int{from, n-1}) } return lessers } func applyMoreThan(intervals [][]int, n int) [][]int { var greaters [][]int for _, interval := range intervals { to := interval[1] if to <= n { continue } greaters = append(greaters, []int{n+1, to}) } // log.Printf(">>>> in applyMoreThan %d to %+v ; result %+v", n, intervals, greaters) return greaters }