aboutsummaryrefslogtreecommitdiff
path: root/day08/part1
diff options
context:
space:
mode:
Diffstat (limited to 'day08/part1')
-rwxr-xr-xday08/part128
1 files changed, 28 insertions, 0 deletions
diff --git a/day08/part1 b/day08/part1
new file mode 100755
index 0000000..ef22cfa
--- /dev/null
+++ b/day08/part1
@@ -0,0 +1,28 @@
+#!/usr/bin/env ruby
+
+def parse_tree(input, start)
+ num_children = input[start]
+ num_metadata = input[start + 1]
+
+ next_index = start + 2
+ sums = 0
+ while num_children > 0 do
+ sum, endindex = parse_tree(input, next_index)
+ sums += sum
+ next_index = endindex + 1
+ num_children -= 1
+ end
+
+ metadata = 0
+ while num_metadata > 0 do
+ metadata += input[next_index]
+ next_index += 1
+ num_metadata -= 1
+ end
+
+ return [ sums + metadata, next_index - 1]
+end
+
+input = gets.chomp.split.map(&:to_i)
+
+puts parse_tree(input, 0)[0]