Browse Source

Fix various mistakes with advancing the current pointer

Somehow this got the right answer for most cases.
master
Chris Smith 5 years ago
parent
commit
3a4e408b81
1 changed files with 9 additions and 6 deletions
  1. 9
    6
      day09.nim

+ 9
- 6
day09.nim View File

@@ -16,11 +16,12 @@ const
16 16
 proc addressOf(memory: pointer, marbleNumber: int): Marble {.inline.} =
17 17
     cast[Marble](cast[uint](memory) + cast[uint](marbleNumber * MarbleSize))
18 18
 
19
-proc insertAfter(node: Marble, memory: pointer, value: int) {.inline.} =
19
+proc insertAfter(node: Marble, memory: pointer, value: int): Marble {.inline.} =
20 20
     var newNode = memory.addressOf(value)
21 21
     newNode.value = cast[int32](value)
22 22
     newNode.next = node.next
23 23
     node.next = newNode
24
+    newNode
24 25
 
25 26
 proc removeNext(node: Marble) {.inline.} =
26 27
     node.next = node.next.next
@@ -72,12 +73,14 @@ for i in 1 .. hundredMarbles:
72 73
         currentTrailDrift = 0
73 74
         specialCountdown = 23
74 75
     else:
75
-        current.next.insertAfter(memory, i)
76
-        current = current.next.next
77
-        if currentTrailDrift == 8:
78
-            currentTrail = currentTrail.next.next
76
+        current = current.next.insertAfter(memory, i)
77
+        if i > 8:
78
+            if currentTrailDrift == 8:
79
+                currentTrail = currentTrail.next.next
80
+            else:
81
+                currentTrailDrift += 2
79 82
         else:
80
-            currentTrailDrift += 2
83
+            currentTrail = current
81 84
 
82 85
     if i == marbles or i == hundredMarbles:
83 86
         echo scores.max