USING: accessors kernel math math.order math.parser ranges sequences sequences.extras sets sorting splitting ; IN: 2025.05 : parse ( seq seq -- ranges ns ) [ [ "-" split1 [ dec> ] bi@ [a..b] ] map ] [ [ dec> ] map ] bi* ; : part-1 ( ranges ns -- n ) [ swap [ in? ] with any? ] with count ; M: range union ( r1 r2 -- r ) over not [ nip ] [ [ drop from>> ] [ [ last ] bi@ max ] 2bi [a..b] ] if ; : part-2 ( ranges ns -- n ) drop sort [ 0 ] dip [ 2dup intersects? [ union ] [ [ length + ] dip ] if ] 1reduce length + ;