瀏覽代碼

Day 8

master
Chris Smith 5 年之前
父節點
當前提交
3d268eefd7
共有 2 個檔案被更改,包括 33 行新增0 行删除
  1. 1
    0
      data/08.txt
  2. 32
    0
      day08.nim

+ 1
- 0
data/08.txt
文件差異過大導致無法顯示
查看文件


+ 32
- 0
day08.nim 查看文件

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