Skip to content

Commit a7b9e6f

Browse files
committed
2024.13 Part 2
1 parent e626c9c commit a7b9e6f

File tree

1 file changed

+13
-30
lines changed

1 file changed

+13
-30
lines changed

2024/13-claw/main.go

Lines changed: 13 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"advent-of-code/util"
55
"bufio"
66
"fmt"
7+
"math"
78
"regexp"
89
)
910

@@ -30,13 +31,12 @@ func main() {
3031
prize = parsePosition(scan.Bytes())
3132
scan.Scan()
3233

33-
if buttonA.X+buttonA.Y > buttonB.X+buttonB.Y {
34-
da, db = simulate(buttonA, buttonB, prize)
35-
dTokens = da*3 + db
36-
} else {
37-
da, db = simulate(buttonB, buttonA, prize)
38-
dTokens = db*3 + da
39-
}
34+
// Part 2
35+
prize.X += 10000000000000
36+
prize.Y += 10000000000000
37+
38+
da, db = simulate(buttonA, buttonB, prize)
39+
dTokens = da*3 + db
4040

4141
fmt.Println(buttonA, buttonB, prize, dTokens)
4242

@@ -60,31 +60,14 @@ func parsePosition(line []byte) position {
6060
}
6161

6262
func simulate(buttonA, buttonB, prize position) (int, int) {
63-
maxA := min(100, prize.X/buttonA.X, prize.Y/buttonA.Y)
64-
maxB := min(100, prize.X/buttonB.X, prize.Y/buttonB.Y)
65-
var da, db, dPresses int
66-
var p position
67-
var found bool
68-
69-
outer:
70-
for da = maxA; da >= 0; da-- {
71-
dPresses = da
72-
p.X = buttonA.X * dPresses
73-
p.Y = buttonA.Y * dPresses
74-
75-
for db = 0; db < maxB; db++ {
76-
if p.X+db*buttonB.X == prize.X && p.Y+db*buttonB.Y == prize.Y {
77-
dPresses += db
78-
found = true
79-
break outer
80-
}
81-
}
63+
var da, db float64
8264

83-
}
84-
85-
if !found {
65+
db = float64(buttonA.Y*prize.X-buttonA.X*prize.Y) / float64(buttonB.X*buttonA.Y-buttonB.Y*buttonA.X)
66+
if db != math.Floor(db) {
8667
return 0, 0
8768
}
8869

89-
return da, db
70+
da = float64(prize.Y-int(db)*buttonB.Y) / float64(buttonA.Y)
71+
72+
return int(da), int(db)
9073
}

0 commit comments

Comments
 (0)