Chris Smith il y a 5 ans
Parent
révision
3d268eefd7
2 fichiers modifiés avec 33 ajouts et 0 suppressions
  1. 1
    0
      data/08.txt
  2. 32
    0
      day08.nim

+ 1
- 0
data/08.txt
Fichier diff supprimé car celui-ci est trop grand
Voir le fichier


+ 32
- 0
day08.nim Voir le fichier

@@ -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