From ad27ffd3a643e93d561fc39cde98e683a6592491 Mon Sep 17 00:00:00 2001 From: Nat Lasseter Date: Tue, 20 Dec 2022 12:09:07 +0000 Subject: [WIP] Day 19, part 1 --- day19/input | 30 +++++++++++++++++++++ day19/part1.rb | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ day19/test | 2 ++ 3 files changed, 114 insertions(+) create mode 100644 day19/input create mode 100644 day19/part1.rb create mode 100644 day19/test 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. -- cgit v1.2.1