available, desired = DATA.read.split("\n\n") available = available.split(", ") desired = desired.lines(chomp: true) available = Regexp.new("^(#{available.join(?|)})+$") pp desired.select { _1 =~ available }.size __END__ r, wr, b, g, bwu, rb, gb, br brwrr bggr gbbr rrbgbr ubwu bwurrg brgr bbrgwb