package crumbs /* func last[T any](xs []T) T { return xs[len(xs)-1] } func SplitOnEdgesFunc[T, S any, K comparable](xs []T, f func(T) (S, K)) (yss [][]S) { if len(xs) <= 0 { return nil } y0, k0 := f(xs[0]) yss = [][]S{[]S{y0}} for _, x := range xs[1:] { y1, k1 := f(x) if k0 != k1 { yss = append(yss, nil) } yss[len(yss)-1] = append(yss[len(yss)-1], y1) k0 = k1 } if len(yss) > 0 && yss[len(yss)-1] == nil { yss = yss[:len(yss)-1] } return } */ /* sentinelledmin := func(x, y int) int { switch { case x <= -1 && y <= -1: return -1 case y <= -1: return x case x <= -1: return y default: return min(x, y) } } sentinelledmax := func(x, y int) int { switch { case x <= -1 && y <= -1: return -1 case y <= -1: return x case x <= -1: return y default: return max(x, y) } } */