Skip to content

Commit 186d380

Browse files
committed
2025-day03
1 parent ebe8dca commit 186d380

File tree

6 files changed

+86
-0
lines changed

6 files changed

+86
-0
lines changed

2025/day03/.bench

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"Lines":[{"Name":"Part 1","N":44215,"NsPerOp":23251,"AllocedBytesPerOp":0,"AllocsPerOp":0,"MBPerS":0,"Measured":1,"Ord":0},{"Name":"Part 2","N":29856,"NsPerOp":40774,"AllocedBytesPerOp":0,"AllocsPerOp":0,"MBPerS":0,"Measured":1,"Ord":0}],"Measured":1}

2025/day03/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
<!-- You can add some comments here if you want to :D -->

2025/day03/main.go

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package main
2+
3+
import (
4+
"aocli/utils"
5+
_ "embed"
6+
"os"
7+
"strings"
8+
)
9+
10+
//go:embed input.txt
11+
var input string
12+
13+
//go:embed input_test.txt
14+
var inputTest string
15+
16+
func main() {
17+
// Check argv if we use test input or not
18+
if len(os.Args) > 1 && os.Args[1] == "test" {
19+
input = inputTest
20+
}
21+
22+
answer := doPartOne(input)
23+
println(answer)
24+
25+
answer = doPartTwo(input)
26+
println(answer)
27+
}
28+
29+
func findLargestDigits(input string, numDigits int) int {
30+
lines := strings.Split(strings.TrimSpace(input), "\n")
31+
ans := 0
32+
for _, line := range lines {
33+
result := make([]byte, numDigits)
34+
start := 0
35+
lineLen := len(line)
36+
37+
for pos := 0; pos < numDigits; pos++ {
38+
// We need to leave enough characters for the remaining digits
39+
remaining := numDigits - pos
40+
end := lineLen - remaining + 1
41+
42+
// Find the largest digit in the valid range
43+
maxIdx := start
44+
maxDigit := line[start]
45+
for i := start + 1; i < end; i++ {
46+
if line[i] > maxDigit {
47+
maxDigit = line[i]
48+
maxIdx = i
49+
}
50+
}
51+
52+
result[pos] = maxDigit
53+
start = maxIdx + 1
54+
}
55+
56+
ans += utils.Atoi(string(result))
57+
}
58+
return ans
59+
}

2025/day03/main_test.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package main
2+
3+
import "testing"
4+
5+
func BenchmarkPartOne(b *testing.B) {
6+
for n := 0; n < b.N; n++ {
7+
doPartOne(input)
8+
}
9+
}
10+
11+
func BenchmarkPartTwo(b *testing.B) {
12+
for n := 0; n < b.N; n++ {
13+
doPartTwo(input)
14+
}
15+
}

2025/day03/part1.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package main
2+
3+
func doPartOne(input string) int {
4+
return findLargestDigits(input, 2)
5+
}

2025/day03/part2.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package main
2+
3+
func doPartTwo(input string) int {
4+
return findLargestDigits(input, 12)
5+
}

0 commit comments

Comments
 (0)