Skip to content

Commit 1a23b23

Browse files
committed
Saves
1 parent 89a7021 commit 1a23b23

File tree

8 files changed

+2040
-16
lines changed

8 files changed

+2040
-16
lines changed

2019/16/part-one.js

Lines changed: 32 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,47 @@
1-
const { input, inputTimes10 } = require('./input');
1+
const { input } = require('./input');
22

3-
const base_pattern = [0, 1, 0, -1];
4-
let current = inputTimes10;
3+
var fillPattern = (function () {
4+
let cachedPatterns = {};
5+
6+
return (n) => {
7+
if (cachedPatterns[n]) {
8+
return cachedPatterns[n];
9+
}
10+
11+
let pattern = [];
12+
for (let num of [0, 1, 0, -1]) {
13+
for (let i = 0; i < n; i++) {
14+
pattern.push(num);
15+
}
16+
}
17+
18+
// Offset the whole pattern left by one
19+
let first_digit = pattern.shift();
20+
pattern.push(first_digit);
21+
22+
cachedPatterns[n] = pattern;
23+
24+
return pattern;
25+
};
26+
})();
27+
28+
let current = input;
529

630
for (let phase = 1; phase <= 100; phase++) {
731
let new_arr = [];
832
for (let n = 0; n < current.length; n++) {
33+
let pattern = fillPattern(n + 1);
934
let sum = 0;
10-
11-
let index = 0;
12-
let position = n + 1;
1335
for (let i = 0; i < current.length; i++) {
14-
position--;
15-
if (position <= 0) {
16-
position = n + 1;
17-
index = (index + 1) % base_pattern.length;
18-
}
19-
2036
let v = current[i];
21-
let scalar = base_pattern[index];
22-
let new_val = v * scalar;
37+
let index = i % pattern.length;
38+
let new_val = v * pattern[index];
2339

2440
sum += new_val;
2541
}
2642

27-
let last_digit = Math.abs(sum % 10);
43+
let last_char = String(sum).substr(-1, 1);
44+
let last_digit = parseInt(last_char, 10);
2845

2946
new_arr.push(last_digit);
3047
}

2019/16/part-two.js

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,11 @@
1-
const { input } = require('./input');
1+
const { partTwoInput } = require('./input');
2+
3+
const offset = parseInt(partTwoInput.slice(0, 7).join(''), 10);
4+
const slice_to_iterate = partTwoInput.slice(offset);
5+
for (let j = 0; j < 100; j++) {
6+
for (let i = slice_to_iterate.length - 2; i >= 0; i--) {
7+
slice_to_iterate[i] = (slice_to_iterate[i + 1] + slice_to_iterate[i]) % 10;
8+
}
9+
}
10+
11+
console.log('8 digits:', slice_to_iterate.slice(0, 8).join(''));

0 commit comments

Comments
 (0)