[2018][ruby][08] speedrun
change yzrxokykmquyontmzruqqvysvmtqqpmp
commit 12b0c9193cceaadf0f0a57e555d16580729efb6f
author Alpha Chen <alpha.chen@gmail.com>
date
parent vzsvsmoy
diff --git a/2018/ruby/day_08.rb b/2018/ruby/day_08.rb
new file mode 100644
index 0000000..7a1faf8
--- /dev/null
+++ b/2018/ruby/day_08.rb
@@ -0,0 +1,34 @@
+raw = ARGF.read.chomp.split(/\s+/).map(&:to_i)
+
+class Node
+  def self.from(raw)
+    child_count = raw.shift
+    metadata_count = raw.shift
+
+    children = child_count.times.map { Node.from(raw) }
+    metadata = metadata_count.times.map { raw.shift }
+
+    Node.new(children, metadata)
+  end
+
+  def initialize(children, metadata)
+    @children, @metadata = children, metadata
+  end
+
+  def checksum
+    @metadata.sum + @children.map(&:checksum).sum
+  end
+
+  def value
+    if @children.empty?
+      @metadata.sum
+    else
+      @metadata.flat_map {|index|
+        @children.fetch(index-1, [])
+      }.map(&:value).sum
+    end
+  end
+end
+
+root = Node.from(raw)
+p root.value