60 lines
1.2 KiB
Go
60 lines
1.2 KiB
Go
package day02
|
|
|
|
import (
|
|
"adventofcode2025/utils"
|
|
"fmt"
|
|
"strings"
|
|
)
|
|
|
|
func Part1(input string) int {
|
|
ranges := strings.Split(input, ",")
|
|
count := 0
|
|
for _, r := range ranges {
|
|
min_s, max_s := strings.Split(r, "-")[0], strings.Split(r, "-")[1]
|
|
min := utils.MustAtoi(min_s)
|
|
max := utils.MustAtoi(max_s)
|
|
for i := min; i <= max; i++ {
|
|
s := fmt.Sprintf("%d", i)
|
|
if len(s)%2 != 0 {
|
|
continue
|
|
}
|
|
if s[:len(s)/2] != s[len(s)/2:] {
|
|
continue
|
|
}
|
|
count += utils.MustAtoi(s)
|
|
}
|
|
}
|
|
return count
|
|
}
|
|
|
|
func Part2(input string) int {
|
|
ranges := strings.Split(input, ",")
|
|
count := 0
|
|
for _, r := range ranges {
|
|
min_s, max_s := strings.Split(r, "-")[0], strings.Split(r, "-")[1]
|
|
min := utils.MustAtoi(min_s)
|
|
max := utils.MustAtoi(max_s)
|
|
for i := min; i <= max; i++ {
|
|
s := fmt.Sprintf("%d", i)
|
|
for numDigits := 1; numDigits <= len(s)/2; numDigits++ {
|
|
if len(s)%numDigits != 0 {
|
|
continue
|
|
}
|
|
found := true
|
|
for j := 1; j < len(s)/numDigits; j++ {
|
|
if s[0:numDigits] != s[j*numDigits:(j+1)*numDigits] {
|
|
found = false
|
|
break
|
|
}
|
|
|
|
}
|
|
if found {
|
|
count += utils.MustAtoi(s)
|
|
break
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return count
|
|
}
|