summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--day15/day15-1.js30
-rw-r--r--day15/day15-2.js30
2 files changed, 60 insertions, 0 deletions
diff --git a/day15/day15-1.js b/day15/day15-1.js
new file mode 100644
index 0000000..45a4ff1
--- /dev/null
+++ b/day15/day15-1.js
@@ -0,0 +1,30 @@
+const data = [0,3,6]
+
+const numbers = {}
+let last, prev1, prev2
+
+const game = (turns) => {
+ for (let i=1; i <= turns; i++) {
+ if (i <= data.length) {
+ numbers[data[i-1]] = [i, 0]
+ last = data[i-1]
+ } else {
+ [prev1, prev2] = numbers[last]
+ if (!prev2) {
+ last = 0
+ numbers[0] = [i, numbers[0][0]]
+ } else {
+ last = prev1 - prev2
+ if (numbers[last]) {
+ numbers[last] = [i, numbers[last][0]]
+ } else {
+ numbers[last] = [i, 0]
+ }
+ }
+ }
+ }
+}
+
+game(2020)
+console.log(last)
+
diff --git a/day15/day15-2.js b/day15/day15-2.js
new file mode 100644
index 0000000..11b137c
--- /dev/null
+++ b/day15/day15-2.js
@@ -0,0 +1,30 @@
+const data = [0,13,1,16,6,17]
+
+const numbers = {}
+let last, prev1, prev2
+
+const game = (turns) => {
+ for (let i=1; i <= turns; i++) {
+ if (i <= data.length) {
+ numbers[data[i-1]] = [i, 0]
+ last = data[i-1]
+ } else {
+ [prev1, prev2] = numbers[last]
+ if (!prev2) {
+ last = 0
+ numbers[0] = [i, numbers[0][0]]
+ } else {
+ last = prev1 - prev2
+ if (numbers[last]) {
+ numbers[last] = [i, numbers[last][0]]
+ } else {
+ numbers[last] = [i, 0]
+ }
+ }
+ }
+ }
+}
+
+game(30000000)
+console.log(last)
+