diff --git a/2024/ruby/day_19.rb b/2024/ruby/day_19.rb index ae885b0..7a1d83b 100644 --- a/2024/ruby/day_19.rb +++ b/2024/ruby/day_19.rb @@ -2,8 +2,18 @@ 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 +available_r = Regexp.new("^(#{available.join(?|)})+$") +pp desired.select { _1 =~ available_r }.size + +ways = Hash.new {|h,k| + h[k] = available + .select { k.start_with?(_1) } + .map { k.sub(_1, "") } + .sum { h[_1] } +} +ways[""] = 1 + +pp desired.sum { ways[_1] } __END__ r, wr, b, g, bwu, rb, gb, br