Skip to content

Commit ac1cab5

Browse files
committed
2024.07 Part 2
1 parent dfe95f8 commit ac1cab5

File tree

2 files changed

+40
-6
lines changed

2 files changed

+40
-6
lines changed

2024/7-bridge/main.go

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import (
44
"advent-of-code/util"
55
"bufio"
66
"fmt"
7-
"math"
7+
"math/big"
88
"strconv"
99
"strings"
1010
)
@@ -20,33 +20,40 @@ var modifiers = []func(int, int) int{
2020

2121
return i1 * i2
2222
},
23+
func(i1, i2 int) int {
24+
return i1*util.IntPow(10, util.IntLength(i2)) + i2
25+
},
2326
}
2427

2528
func main() {
2629
file := util.FileFromArgs()
2730
scan := bufio.NewScanner(file)
2831

2932
var parts []string
30-
var result, sum int
33+
var result, result2, sum int
3134
var numbers []int
3235

3336
for scan.Scan() {
3437
parts = strings.SplitN(scan.Text(), ": ", 2)
3538
sum, _ = strconv.Atoi(parts[0])
3639
numbers = util.StringToInts(parts[1], " ")
3740

38-
if resolves(sum, numbers) {
41+
if resolves(sum, numbers, 2) {
3942
result += sum
43+
result2 += sum
44+
} else if resolves(sum, numbers, 3) {
45+
result2 += sum
4046
}
4147
}
4248

4349
fmt.Println(result)
50+
fmt.Println(result2)
4451
}
4552

46-
func resolves(sum int, numbers []int) bool {
47-
possibilities := int(math.Pow(2, float64(len(numbers)-1)))
53+
func resolves(sum int, numbers []int, base int) bool {
54+
possibilities := util.IntPow(base, len(numbers)-1)
4855
for i := range possibilities {
49-
bin := ("0000000000" + fmt.Sprintf("%b", i))
56+
bin := ("0000000000" + big.NewInt(int64(i)).Text(base))
5057
bin = bin[len(bin)-len(numbers)+1:]
5158

5259
total := numbers[0]

util/math.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,30 @@ func Abs[I constraints.Integer](v I) I {
99

1010
return v
1111
}
12+
13+
func IntLength(v int) int {
14+
x, count := 10, 1
15+
16+
for x <= v {
17+
x *= 10
18+
count++
19+
}
20+
21+
return count
22+
}
23+
24+
func IntPow(n, m int) int {
25+
if m == 0 {
26+
return 1
27+
}
28+
29+
if m == 1 {
30+
return n
31+
}
32+
33+
result := n
34+
for i := 2; i <= m; i++ {
35+
result *= n
36+
}
37+
return result
38+
}

0 commit comments

Comments
 (0)