diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3a696dd --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/p15 diff --git a/p15.nim b/p15.nim new file mode 100644 index 0000000..a6d54fa --- /dev/null +++ b/p15.nim @@ -0,0 +1,33 @@ +import tables + +iterator play(start: seq[int]): int = + var spoke = initTable[int, int]() + var turn = 0 + var nextSpeak = 0 + + for i in start: + turn += 1 + spoke[i] = turn + yield i + nextSpeak = 0 + + while true: + turn += 1 + yield nextSpeak + var lastSpoke = spoke.getOrDefault(nextSpeak, -1) + spoke[nextSpeak] = turn + + if lastSpoke == -1: + nextSpeak = 0 + else: + nextSpeak = turn - lastSpoke + +proc solve(s: seq[int], n: int): int = + var i = 0 + for x in play(s): + inc i + if i == n: + echo x + break + +echo solve(@[5,1,9,18,13,8,0], 30000000)