aboutsummaryrefslogtreecommitdiff
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
parent896addebb0843d99d9845140eb3b1167bf6e9787 (diff)
[WIP] Day 19, part 1
-rw-r--r--day19/input30
-rw-r--r--day19/part1.rb82
-rw-r--r--day19/test2
3 files changed, 114 insertions, 0 deletions
diff --git a/day19/input b/day19/input
new file mode 100644
index 0000000..37074e4
--- /dev/null
+++ b/day19/input
@@ -0,0 +1,30 @@
+Blueprint 1: Each ore robot costs 4 ore. Each clay robot costs 4 ore. Each obsidian robot costs 3 ore and 5 clay. Each geode robot costs 3 ore and 18 obsidian.
+Blueprint 2: Each ore robot costs 4 ore. Each clay robot costs 4 ore. Each obsidian robot costs 4 ore and 16 clay. Each geode robot costs 2 ore and 15 obsidian.
+Blueprint 3: Each ore robot costs 3 ore. Each clay robot costs 4 ore. Each obsidian robot costs 4 ore and 19 clay. Each geode robot costs 4 ore and 11 obsidian.
+Blueprint 4: Each ore robot costs 4 ore. Each clay robot costs 3 ore. Each obsidian robot costs 2 ore and 13 clay. Each geode robot costs 2 ore and 9 obsidian.
+Blueprint 5: Each ore robot costs 4 ore. Each clay robot costs 4 ore. Each obsidian robot costs 2 ore and 14 clay. Each geode robot costs 4 ore and 15 obsidian.
+Blueprint 6: Each ore robot costs 4 ore. Each clay robot costs 3 ore. Each obsidian robot costs 3 ore and 10 clay. Each geode robot costs 2 ore and 10 obsidian.
+Blueprint 7: Each ore robot costs 2 ore. Each clay robot costs 4 ore. Each obsidian robot costs 4 ore and 16 clay. Each geode robot costs 4 ore and 17 obsidian.
+Blueprint 8: Each ore robot costs 2 ore. Each clay robot costs 4 ore. Each obsidian robot costs 3 ore and 19 clay. Each geode robot costs 4 ore and 12 obsidian.
+Blueprint 9: Each ore robot costs 3 ore. Each clay robot costs 3 ore. Each obsidian robot costs 3 ore and 17 clay. Each geode robot costs 2 ore and 13 obsidian.
+Blueprint 10: Each ore robot costs 3 ore. Each clay robot costs 4 ore. Each obsidian robot costs 4 ore and 8 clay. Each geode robot costs 2 ore and 10 obsidian.
+Blueprint 11: Each ore robot costs 4 ore. Each clay robot costs 3 ore. Each obsidian robot costs 2 ore and 7 clay. Each geode robot costs 3 ore and 8 obsidian.
+Blueprint 12: Each ore robot costs 3 ore. Each clay robot costs 4 ore. Each obsidian robot costs 3 ore and 18 clay. Each geode robot costs 4 ore and 16 obsidian.
+Blueprint 13: Each ore robot costs 4 ore. Each clay robot costs 3 ore. Each obsidian robot costs 2 ore and 20 clay. Each geode robot costs 3 ore and 9 obsidian.
+Blueprint 14: Each ore robot costs 4 ore. Each clay robot costs 3 ore. Each obsidian robot costs 4 ore and 6 clay. Each geode robot costs 3 ore and 11 obsidian.
+Blueprint 15: Each ore robot costs 4 ore. Each clay robot costs 4 ore. Each obsidian robot costs 2 ore and 16 clay. Each geode robot costs 4 ore and 16 obsidian.
+Blueprint 16: Each ore robot costs 4 ore. Each clay robot costs 3 ore. Each obsidian robot costs 4 ore and 5 clay. Each geode robot costs 3 ore and 19 obsidian.
+Blueprint 17: Each ore robot costs 4 ore. Each clay robot costs 4 ore. Each obsidian robot costs 3 ore and 5 clay. Each geode robot costs 4 ore and 11 obsidian.
+Blueprint 18: Each ore robot costs 4 ore. Each clay robot costs 3 ore. Each obsidian robot costs 4 ore and 18 clay. Each geode robot costs 3 ore and 13 obsidian.
+Blueprint 19: Each ore robot costs 3 ore. Each clay robot costs 3 ore. Each obsidian robot costs 3 ore and 9 clay. Each geode robot costs 3 ore and 7 obsidian.
+Blueprint 20: Each ore robot costs 2 ore. Each clay robot costs 3 ore. Each obsidian robot costs 2 ore and 14 clay. Each geode robot costs 3 ore and 20 obsidian.
+Blueprint 21: Each ore robot costs 2 ore. Each clay robot costs 4 ore. Each obsidian robot costs 2 ore and 20 clay. Each geode robot costs 2 ore and 17 obsidian.
+Blueprint 22: Each ore robot costs 4 ore. Each clay robot costs 4 ore. Each obsidian robot costs 4 ore and 14 clay. Each geode robot costs 3 ore and 16 obsidian.
+Blueprint 23: Each ore robot costs 3 ore. Each clay robot costs 3 ore. Each obsidian robot costs 2 ore and 20 clay. Each geode robot costs 3 ore and 18 obsidian.
+Blueprint 24: Each ore robot costs 2 ore. Each clay robot costs 2 ore. Each obsidian robot costs 2 ore and 20 clay. Each geode robot costs 2 ore and 14 obsidian.
+Blueprint 25: Each ore robot costs 2 ore. Each clay robot costs 4 ore. Each obsidian robot costs 4 ore and 16 clay. Each geode robot costs 3 ore and 13 obsidian.
+Blueprint 26: Each ore robot costs 3 ore. Each clay robot costs 3 ore. Each obsidian robot costs 3 ore and 9 clay. Each geode robot costs 2 ore and 10 obsidian.
+Blueprint 27: Each ore robot costs 4 ore. Each clay robot costs 3 ore. Each obsidian robot costs 3 ore and 20 clay. Each geode robot costs 2 ore and 19 obsidian.
+Blueprint 28: Each ore robot costs 3 ore. Each clay robot costs 3 ore. Each obsidian robot costs 3 ore and 15 clay. Each geode robot costs 2 ore and 8 obsidian.
+Blueprint 29: Each ore robot costs 3 ore. Each clay robot costs 4 ore. Each obsidian robot costs 4 ore and 18 clay. Each geode robot costs 4 ore and 12 obsidian.
+Blueprint 30: Each ore robot costs 2 ore. Each clay robot costs 2 ore. Each obsidian robot costs 2 ore and 10 clay. Each geode robot costs 2 ore and 11 obsidian.
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]
diff --git a/day19/test b/day19/test
new file mode 100644
index 0000000..f39c094
--- /dev/null
+++ b/day19/test
@@ -0,0 +1,2 @@
+Blueprint 1: Each ore robot costs 4 ore. Each clay robot costs 2 ore. Each obsidian robot costs 3 ore and 14 clay. Each geode robot costs 2 ore and 7 obsidian.
+Blueprint 2: Each ore robot costs 2 ore. Each clay robot costs 3 ore. Each obsidian robot costs 3 ore and 8 clay. Each geode robot costs 3 ore and 12 obsidian.