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