aboutsummaryrefslogtreecommitdiff
path: root/day21/part1.rb
diff options
context:
space:
mode:
Diffstat (limited to 'day21/part1.rb')
-rw-r--r--day21/part1.rb34
1 files changed, 34 insertions, 0 deletions
diff --git a/day21/part1.rb b/day21/part1.rb
new file mode 100644
index 0000000..4895237
--- /dev/null
+++ b/day21/part1.rb
@@ -0,0 +1,34 @@
+monkeys = $stdin.readlines
+
+nums = {}
+
+monkeys.count.times do |mix|
+ if monkeys[mix] =~ /(\d+)/
+ val = $1.to_i
+ nums[monkeys[mix][0...4]] = $1.to_i
+ monkeys[mix] = nil
+ end
+end
+monkeys.compact!
+
+while nums["root"].nil?
+ monkeys.count.times do |mix|
+ f, a, b = monkeys[mix].scan(/[a-z]{4}/)
+ unless nums[a].nil? || nums[b].nil?
+ case monkeys[mix][11]
+ when ?+
+ nums[f] = nums[a] + nums [b]
+ when ?-
+ nums[f] = nums[a] - nums [b]
+ when ?*
+ nums[f] = nums[a] * nums [b]
+ when ?/
+ nums[f] = nums[a] / nums [b]
+ end
+ monkeys[mix] = nil
+ end
+ end
+ monkeys.compact!
+end
+
+puts nums["root"]