1
0
Fork 0
advent-of-code-2024/19/main.rb
2024-12-19 11:02:08 -05:00

34 lines
622 B
Ruby
Executable file

#!/usr/bin/env ruby
require "debug"
input = (ARGV.first.nil? ? DATA : ARGF)
.readlines(chomp: true)
towels = input.first.split(", ")
designs = input[2..]
def count_candidates(design, towels, cache = {})
return 1 if design == ""
return cache[design] if cache.key?(design)
cache[design] = towels
.select { design.start_with?(_1) }
.map { count_candidates(design[_1.size..], towels, cache) }
.sum
end
p designs.count { _1.match?(/^#{Regexp.union(*towels)}+$/) }
p designs.map { count_candidates(_1, towels) }.sum
__END__
r, wr, b, g, bwu, rb, gb, br
brwrr
bggr
gbbr
rrbgbr
ubwu
bwurrg
brgr
bbrgwb