diff options
author | Marcin Chrzanowski <marcin.j.chrzanowski@gmail.com> | 2020-12-25 15:20:51 +0100 |
---|---|---|
committer | Marcin Chrzanowski <marcin.j.chrzanowski@gmail.com> | 2020-12-25 15:20:51 +0100 |
commit | e2dd1e03066c593a1df19190c4c72f27ea9714dd (patch) | |
tree | 9b544935de2e093e1e5f0908f73aeef5da733d0b /07/a.rb | |
parent | ae26a072fb9d90ad27238ea75004166d17521ed0 (diff) |
Add day 7
Diffstat (limited to '07/a.rb')
-rw-r--r-- | 07/a.rb | 39 |
1 files changed, 39 insertions, 0 deletions
@@ -0,0 +1,39 @@ +rules = {} +gold_producing = {} +lines = 0 +File.readlines('input.txt').each do |line| + lines += 1 + line.chomp! + bag, contents = line.split 'bags contain' + bag.strip! + rules[bag] = [] + contents.split(', ').map do |content| + match = /^(\d+) ([\w\s]+) bags?\.?$/.match(content.strip) + if match + color = match[2] + rules[bag].push color + + if color == 'shiny gold' + gold_producing[bag] = true + end + end + + end +end + +changed = true +while changed + changed = false + rules.each do |bag, productions| + if !gold_producing[bag] + productions.each do |subbag| + if gold_producing[subbag] + gold_producing[bag] = true + changed = true + end + end + end + end +end + +puts gold_producing.size |