Browse Source

Day 8

master
Chris Smith 5 years ago
parent
commit
3d268eefd7
2 changed files with 33 additions and 0 deletions
  1. 1
    0
      data/08.txt
  2. 32
    0
      day08.nim

+ 1
- 0
data/08.txt
File diff suppressed because it is too large
View File


+ 32
- 0
day08.nim View File

@@ -0,0 +1,32 @@
1
+import math, sequtils, strutils
2
+
3
+func readNode(input: seq[string], start: int): tuple[value: int, metasum: int, offset: int] =
4
+    let
5
+        child_count = input[start + 0].parseInt
6
+        meta_count = input[start + 1].parseInt
7
+    var
8
+        value = 0
9
+        metasum = 0
10
+        offset = start + 2
11
+        child_values: seq[int]
12
+    
13
+    for i in 0 .. child_count - 1:
14
+        var res = readNode(input, offset)
15
+        child_values.add(res.value)
16
+        offset = res.offset
17
+        metasum += res.metasum
18
+
19
+    for m in input[offset .. offset + meta_count - 1]:
20
+        var v = m.parseInt
21
+        if v > 0 and v - 1 < child_count:
22
+            value += child_values[v - 1]
23
+        metasum += v
24
+    offset += meta_count
25
+    
26
+    if child_count == 0:
27
+        value = metasum
28
+    (value, metasum, offset)
29
+
30
+let root = readNode(readFile("data/08.txt").strip.split(" "), 0)
31
+echo root.metasum
32
+echo root.value