Skip to content

Commit 37150fa

Browse files
committed
2025-day02
1 parent f105563 commit 37150fa

File tree

6 files changed

+109
-0
lines changed

6 files changed

+109
-0
lines changed

2025/day02/.bench

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

2025/day02/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/day02/main.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package main
2+
3+
import (
4+
_ "embed"
5+
"os"
6+
)
7+
8+
//go:embed input.txt
9+
var input string
10+
11+
//go:embed input_test.txt
12+
var inputTest string
13+
14+
func main() {
15+
// Check argv if we use test input or not
16+
if len(os.Args) > 1 && os.Args[1] == "test" {
17+
input = inputTest
18+
}
19+
20+
answer := doPartOne(input)
21+
println(answer)
22+
23+
answer = doPartTwo(input)
24+
println(answer)
25+
}

2025/day02/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/day02/part1.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
"strconv"
6+
"strings"
7+
)
8+
9+
func doPartOne(input string) int {
10+
lines := strings.Split(strings.Split(strings.TrimSpace(input), "\n")[0], ",")
11+
ans := 0
12+
for _, line := range lines {
13+
var id1, id2 int
14+
fmt.Sscanf(line, "%d-%d", &id1, &id2)
15+
for id := id1; id <= id2; id++ {
16+
idstring := strconv.Itoa(id)
17+
if len(idstring)%2 != 0 {
18+
continue
19+
}
20+
mid := len(idstring) / 2
21+
if idstring[:mid] == idstring[mid:] {
22+
ans += id
23+
}
24+
}
25+
}
26+
return ans
27+
}

2025/day02/part2.go

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package main
2+
3+
import (
4+
"aocli/utils"
5+
"fmt"
6+
"strconv"
7+
"strings"
8+
)
9+
10+
func doPartTwo(input string) int {
11+
lines := strings.Split(strings.Split(strings.TrimSpace(input), "\n")[0], ",")
12+
ans := 0
13+
for _, line := range lines {
14+
var id1, id2 int
15+
fmt.Sscanf(line, "%d-%d", &id1, &id2)
16+
nextid:
17+
for id := id1; id <= id2; id++ {
18+
idstring := strconv.Itoa(id)
19+
mid := len(idstring) / 2
20+
for i := 1; i <= mid; i++ {
21+
if len(idstring)%i != 0 {
22+
continue
23+
}
24+
chunks := utils.ChunkSlice([]rune(idstring), i)
25+
match := true
26+
for i := 1; i < len(chunks); i++ {
27+
if string(chunks[i]) != string(chunks[0]) {
28+
match = false
29+
break
30+
}
31+
}
32+
if match {
33+
ans += id
34+
continue nextid
35+
}
36+
}
37+
}
38+
}
39+
return ans
40+
}

0 commit comments

Comments
 (0)