aboutsummaryrefslogtreecommitdiff
path: root/day19/part1.rb
diff options
context:
space:
mode:
authorNat Lasseter <user@4574.co.uk>2022-12-20 12:09:07 +0000
committerNat Lasseter <user@4574.co.uk>2022-12-20 12:09:07 +0000
commitad27ffd3a643e93d561fc39cde98e683a6592491 (patch)
treed87ddd3913d7692d7b8c5a719faa522b558a3cd7 /day19/part1.rb
parent896addebb0843d99d9845140eb3b1167bf6e9787 (diff)
[WIP] Day 19, part 1
Diffstat (limited to 'day19/part1.rb')
-rw-r--r--day19/part1.rb82
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]