-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathday9.js
66 lines (60 loc) · 1.89 KB
/
day9.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
const { readData } = require('./readfile');
// const input = readData('day9Input-simple.txt');
// let n = 5;
// 127
const input = readData('day9Input.txt');
let n = 25;
const lines = input.split(/\n/).map(x => parseInt(x));
// console.log(lines);
const findInvalid = () => {
const initMap = (lines, n) => {
let sumMap = {};
for (let i = 0; i < n; ++i) {
for (let j = i + 1; j < n; ++j) {
let sum = lines[i] + lines[j];
sumMap[sum] = sumMap[sum] ? sumMap[sum] + 1 : 1;
}
}
return sumMap;
}
let sumMap = initMap(lines, n);
// console.log(sumMap)
for (let i = n; i < lines.length; i++) {
// console.log(sumMap, lines[i])
if (!sumMap[lines[i]] || sumMap[lines[i]] === 0) {
console.log(lines[i]);
// question1: 144381670
break;
}
for (let j = i - n + 1; j < i; j++) {
let toRemoveSum = lines[i - n] + lines[j];
// console.log('--------------')
// console.log(toRemoveSum, sumMap[toRemoveSum]);
sumMap[toRemoveSum]--;
// console.log(toRemoveSum, sumMap[toRemoveSum]);
// console.log('--------------')
let toAddSum = lines[i] + lines[j];
sumMap[toAddSum] = sumMap[toAddSum] ? sumMap[toAddSum] + 1 : 1;
}
}
}
// findInvalid();
let invalid = 144381670;
// let invalid = 127;
let i = 0, j = 1;
let sum = lines[i] + lines[j];
while(j < lines.length && i < j && sum != invalid) {
// console.log(i, lines[i], j, lines[j], sum)
if (sum < invalid) {
++j;
sum = sum + lines[j];
} else if (sum > invalid) {
sum = sum - lines[i];
++i;
}
}
// console.log(i, lines[i], j, lines[j], sum)
const sorted = lines.slice(i, j+1).sort((a, b) => a-b);
// console.log(sorted)
console.log(sorted.shift()+sorted.pop())
// 20532569