diff options
author | Nat Lasseter <user@4574.co.uk> | 2022-12-20 12:09:07 +0000 |
---|---|---|
committer | Nat Lasseter <user@4574.co.uk> | 2022-12-20 12:09:07 +0000 |
commit | ad27ffd3a643e93d561fc39cde98e683a6592491 (patch) | |
tree | d87ddd3913d7692d7b8c5a719faa522b558a3cd7 /day19/part1.rb | |
parent | 896addebb0843d99d9845140eb3b1167bf6e9787 (diff) |
[WIP] Day 19, part 1
Diffstat (limited to 'day19/part1.rb')
-rw-r--r-- | day19/part1.rb | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/day19/part1.rb b/day19/part1.rb new file mode 100644 index 0000000..0b3e6a3 --- /dev/null +++ b/day19/part1.rb @@ -0,0 +1,82 @@ +class Blueprint + def initialize(line) + id, oreore, claore, obsore, obscla, geoore, geoobs = line.scan(/\d+/).map(&:to_i) + @id = id + @ore = { + ore: oreore + } + @clay = { + ore: claore + } + @obsidian = { + ore: obsore, + clay: obscla + } + @geode = { + ore: geoore, + obsidian: geoobs + } + end + + attr_reader :id + + def make_robot?(pool) + if pool[:obsidian] >= @geode[:obsidian] + if pool[:ore] >= @geode[:ore] + pool[:ore] -= @geode[:ore] + pool[:obsidian] -= @geode[:obsidian] + return :geode + else + return false + end + end + if pool[:clay] >= @obsidian[:clay] + if pool[:ore] >= @obsidian[:ore] + pool[:ore] -= @obsidian[:ore] + pool[:clay] -= @obsidian[:clay] + return :obsidian + else + return false + end + end + if pool[:ore] >= @clay[:ore] + pool[:ore] -= @clay[:ore] + return :clay + end + if pool[:ore] >= @ore[:ore] + pool[:ore] -= @ore[:ore] + return :ore + end + return false + end +end + +blueprints = $stdin.readlines.map{ |line| Blueprint.new(line) } +time_limit = 24 + +pool = { + ore: 0, + clay: 0, + obsidian: 0, + geode: 0 +} + +robots = { + ore: 1, + clay: 0, + obsidian: 0, + geode: 0 +} + +time_limit.times do + new_robot = blueprints[0].make_robot?(pool) + + pool[:ore] += robots[:ore] + pool[:clay] += robots[:clay] + pool[:obsidian] += robots[:obsidian] + pool[:geode] += robots[:geode] + + robots[new_robot] += 1 if new_robot +end + +pp pool[:geode] |