! Copyright (C) 2022 Doug Coleman. ! See http://factorcode.org/license.txt for BSD license. USING: accessors interval-sets kernel math math.intervals math.parser sequences splitting ; IN: 2022-aoc4 : i1-in-i2? ( i1 i2 -- ? ) [ [ from>> first ] dip interval-contains? ] [ [ to>> first ] dip interval-contains? ] 2bi and ; : aoc4-1 ( string -- n ) split-lines 0 [ "," split1 [ "-" split1 [ dec> ] bi@ [a,b] ] bi@ [ i1-in-i2? ] [ swap i1-in-i2? ] 2bi or 1 0 ? + ] reduce ; : i1-overlap-i2? ( i1 i2 -- ? ) [ [ from>> first ] dip interval-contains? ] [ [ to>> first ] dip interval-contains? ] 2bi or ; : aoc4-2 ( string -- n ) split-lines 0 [ "," split1 [ "-" split1 [ dec> ] bi@ [a,b] ] bi@ [ i1-overlap-i2? ] [ swap i1-overlap-i2? ] 2bi or 1 0 ? + ] reduce ;