-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathday8_part2.js
More file actions
124 lines (97 loc) · 3.31 KB
/
day8_part2.js
File metadata and controls
124 lines (97 loc) · 3.31 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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
var movements_pattern = "LLRRRLLRLRRRLLRLRLRLRLRRRLRRLRRLRLLLRRLLRRLRRLRRLRRRLLLRRLRLRRRLRRRLRLRRLRRRLRLRRRLRLRLLLRLRRLRLRRLRRRLRLRRRLRRRLRRRLRRRLRLRRRLRRRLRLLRRLRLRLRRRLRRLRRRLRRRLRRRLRRRLLLLRRLLRLRRLRRLRRRLRRRLLLRRLRRLRLRRLRRRLRRLRLRRRLRLRRLLRLLRRLRLRRRLRRLRRLRLRRLLLRRRLRLRRRLRLRLLRLRLRRRLRLRLRRRLRRLRRLRRRLRRLLRRRR"
// example
// var movements_pattern = "LR"
process.stdin.on('data', function (data) {
var input = data.toString().replace(/\r\n/g, ",'").replace(/\(/g, "['").replace(/\)/g, "']").replace(/\,\s/g, "','").replace(/\s\=/g, "':")
ready(input)
})
async function ready(data) {
eval("var path = {'" + data.toString() + "}")
console.log(path)
let movements_pattern_binary = movements_pattern.replace(/L/g, "0").replace(/R/g, "1")
var steps = 0
var saved_steps = []
console.log(movements_pattern_binary)
// find all paths that ends with A
var start_paths = []
for (const key in path) {
if (key.endsWith("A")) {
start_paths.push(key)
}
}
console.log(start_paths)
keys = start_paths
/*
// find steps to reach the ZZZ
// function findZZZ(keys) {
while (!keys.every(x => x.endsWith("Z"))) {
console.log("steps", steps)
let keys_cp = JSON.parse(JSON.stringify(keys))
for (let i = 0; i < start_paths.length; i++) {
for (const movement of movements_pattern_binary) {
if (keys_cp[i].endsWith("Z")) {
// save steps and skip this iteration
saved_steps.push(steps)
continue
}
// console.log("i", i, "movement", movement)
key = keys_cp[i]
// console.log(key, path[key][movement])
keys_cp[i] = path[key][movement]
}
steps++
}
console.log(keys, keys_cp)
keys = keys_cp
// if all keys end with Z, return
// if (keys_cp.every(x => x.endsWith("Z")))
// return
// findZZZ(keys_cp)
}
// findZZZ(start_paths)
*/
function findZZZ(key) {
let end = false
for (const movement of movements_pattern_binary) {
end = path[key][movement]
// console.log(end)
steps++
}
if (end.endsWith("Z")) {
console.log("end", end)
console.log("end", steps)
saved_steps = steps
steps = 0
return saved_steps
}
return findZZZ(end)
}
// for (const key of start_paths) {
// console.log(key)
// findZZZ(key)
// }
var map = [findZZZ(keys[0])
, findZZZ(keys[1])
, findZZZ(keys[2])
, findZZZ(keys[3])
, findZZZ(keys[4])
, findZZZ(keys[5])]
console.log(map, lcmOfArray(map))
}
function gcd(a, b) {
if (b === 0) {
return a;
} else {
return gcd(b, a % b);
}
}
function lcm(a, b) {
return (a * b) / gcd(a, b);
}
function lcmOfArray(numbers) {
let result = numbers[0];
for (let i = 1; i < numbers.length; i++) {
result = lcm(result, numbers[i]);
}
return result;
}