diff --git a/internal/2025/DayTwo/code.go b/internal/2025/DayTwo/code.go index d868fad..51e9bd9 100644 --- a/internal/2025/DayTwo/code.go +++ b/internal/2025/DayTwo/code.go @@ -1,23 +1,33 @@ package daytwo import ( - "advent-of-code/internal/registry" "os" "strconv" "strings" + + "advent-of-code/internal/registry" ) func init() { registry.Register("2025D2", ParseInput, PartOne, PartTwo) } -func isInvalidID(id int) bool { +func isInvalid(id int, exactTwo bool) bool { sID := strconv.Itoa(id) - if len(sID)%2 != 0 { - return false + if exactTwo { + half := len(sID) / 2 + return sID[:half] == sID[half:] } - half := len(sID) / 2 - return sID[:half] == sID[half:] + for patternLength := 1; patternLength <= len(sID)/2; patternLength++ { + repetitions := len(sID) / patternLength + if repetitions < 2 || len(sID)%patternLength != 0 { + continue + } + if strings.Repeat(sID[:patternLength], repetitions) == sID { + return true + } + } + return false } func ParseInput(filepath string) []string { @@ -33,7 +43,7 @@ func PartOne(input []string) int { start, _ := strconv.Atoi(parts[0]) end, _ := strconv.Atoi(parts[1]) for id := start; id <= end; id++ { - if isInvalidID(id) { + if isInvalid(id, true) { sum += id } }