-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathonestar_day9.js
More file actions
80 lines (63 loc) · 1.34 KB
/
onestar_day9.js
File metadata and controls
80 lines (63 loc) · 1.34 KB
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
67
68
69
70
71
72
73
74
75
76
77
78
79
const fs = require('fs');
const make_fileSystem = (diskmap) => {
let bloques = [];
is_file = true;
let id = 0;
for(x in diskmap){
x = parseInt(diskmap[x]);
if(is_file){
bloques = [...bloques, ...new Array(x).fill(id)];
id += 1;
is_file = false;
} else {
bloques = [...bloques, ...new Array(x).fill(null)];
is_file = true;
}
// console.log(bloques)
}
return bloques;
}
const mover = (arr) => {
let primer_libre = 0;
while(arr[primer_libre] != null){
primer_libre += 1;
}
let i = arr?.length -1;
while(arr[i] == null){
i -= 1;
}
while(i > primer_libre){
arr[primer_libre] = arr[i];
arr[i] = null;
while(arr[i] == null){
i-= 1
}
while(arr[primer_libre] != null){
primer_libre += 1
}
}
return arr
}
const suma = (arr) => {
let res = 0;
for (const [idx, elem] of arr.entries()) {
if(elem != null){
res += idx * elem;
}
}
return res;
}
let res = 0;
let fileSystem = null;
let line = null;
fs.readFile('./day_09.in', (err, data) => {
if (err) throw err;
line = data.toString();
// console.log(line);
fileSystem = make_fileSystem(line);
// console.log(fileSystem.toString());
// console.log("\n");
res = suma(mover(fileSystem))
// console.log(mover(fileSystem).toString());
console.log(res);
});