aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--2020/fifteen.nim20
-rw-r--r--2020/input/fifteen.txt1
2 files changed, 21 insertions, 0 deletions
diff --git a/2020/fifteen.nim b/2020/fifteen.nim
new file mode 100644
index 0000000..0086054
--- /dev/null
+++ b/2020/fifteen.nim
@@ -0,0 +1,20 @@
+# Day Fifteen: Rambunctious Recitation
+import os, strutils, sequtils
+
+let input: string = paramStr(1)
+
+proc recite(nth: int): int =
+ var numbers: seq[int] = map(split(strip(readFile(input)), ","), parseInt)
+ var history: seq[int] = newSeqWith[int](nth, -1)
+ for i in 0 .. nth - 2:
+ let previous: int = numbers[i]
+ if i == len(numbers) - 1:
+ if history[previous] != -1:
+ numbers.add(i - history[previous])
+ else:
+ numbers.add(0)
+ history[previous] = i
+ return numbers[^1]
+
+echo recite(2020)
+echo recite(30000000)
diff --git a/2020/input/fifteen.txt b/2020/input/fifteen.txt
new file mode 100644
index 0000000..ef94aa4
--- /dev/null
+++ b/2020/input/fifteen.txt
@@ -0,0 +1 @@
+20,0,1,11,6,3