-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathday07.js
64 lines (52 loc) · 1.65 KB
/
day07.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
var fs = require('fs')
function load(file) {
var input = fs.readFileSync(file, 'utf8')
let crabs = []
input.split(",").forEach(item => {
crabs.push(+item)
})
return crabs
}
function runDay07(file) {
let crabs = load(file)
let maxFuel = 999999999
let bestPosition = -1
for (let alignedPositionIndex = 0; alignedPositionIndex < crabs.length; alignedPositionIndex++) {
const alignPosition = crabs[alignedPositionIndex]
let fuelSpent = 0
crabs.forEach(crab => {
fuelSpent += Math.abs(alignPosition - crab)
})
if (fuelSpent < maxFuel) {
maxFuel = fuelSpent
bestPosition = alignPosition
}
}
console.log("Step1", file, "->", maxFuel)
}
function runDay07s2(file) {
let crabs = load(file)
let maxFuel = 999999999
let bestPosition = -1
const max = Math.max(...crabs)
const min = Math.min(...crabs)
// console.log(min, max)
for (let alignPosition = min; alignPosition <= max; alignPosition++) {
let fuelSpent = 0
for (let crabIndex = 0; crabIndex < crabs.length; crabIndex++) {
let distance = Math.abs(alignPosition - crabs[crabIndex])
let fuelCost = (distance * (distance + 1))/2
fuelSpent += fuelCost
}
// console.log("Position", alignPosition, "cost", fuelSpent)
if (fuelSpent < maxFuel) {
maxFuel = fuelSpent
bestPosition = alignPosition
}
}
console.log("Step2", file, "->", bestPosition, maxFuel )
}
runDay07('input-test.txt')
runDay07('input.txt')
runDay07s2('input-test.txt')
runDay07s2('input.txt')