Skip to content
Snippets Groups Projects
Commit 8ffb73da authored by Mark Jeeninga's avatar Mark Jeeninga
Browse files

Day 13 Mark

parent 33e7cde5
Branches
No related tags found
No related merge requests found
machines = input.split('\n\n').map(machine => machine.match(/Button A: X\+(\d+), Y\+(\d+)\nButton B: X\+(\d+), Y\+(\d+)\nPrize: X=(\d+), Y=(\d+)/).slice(1).map(Number))
score = (A_presses, B_presses) => 3 * A_presses + B_presses
solved = (machine, A_presses, B_presses) => {
X = A_presses * machine[0] + B_presses * machine[2]
Y = A_presses * machine[1] + B_presses * machine[3]
Xdiff = X - machine[4]
Ydiff = Y - machine[5]
if(Xdiff < 0 && Ydiff < 0){
return -1
}
if(Xdiff == 0 && Ydiff == 0){
return 0
}
return 1
}
solve = machine => {
max_B_presses = 0
while(solved(machine, 0, max_B_presses) <= 0){
max_B_presses++
}
B_presses = max_B_presses
A_presses = 0
do {
B_presses--
A_presses = 0
do {
A_presses++
} while(solved(machine, A_presses, B_presses) < 0)
} while(B_presses >= 0 && solved(machine, A_presses, B_presses) > 0)
return solved(machine, A_presses, B_presses) ? 0 : score(A_presses, B_presses)
}
output1 = machines.reduce((total, machine) => total + solve(machine), 0)
////
machines.map(machine => {machine[4] += 10000000000000; machine[5] += 10000000000000})
solved = (machine, A_presses, B_presses) => {
X = A_presses * machine[0] + B_presses * machine[2]
Y = A_presses * machine[1] + B_presses * machine[3]
Xdiff = X - machine[4]
Ydiff = Y - machine[5]
if(Xdiff < 0 && Ydiff < 0){
return -1
}
if(Xdiff == 0 && Ydiff == 0){
return 0
}
return 1
}
solve = machine => {
A_X = machine[0]
A_Y = machine[1]
B_X = machine[2]
B_Y = machine[3]
X = machine[4]
Y = machine[5]
det = A_X * B_Y - A_Y * B_X
A_presses = Math.round((B_Y * X - B_X * Y)/det)
B_presses = Math.round((A_X * Y - A_Y * X)/det)
return solved(machine, A_presses, B_presses) ? 0 : score(A_presses, B_presses)
}
output2 = machines.reduce((total, machine) => total + solve(machine), 0)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment