From 00ccbaf0d00c72738b1034238d2a6d30c7de0c2f Mon Sep 17 00:00:00 2001 From: Kharec Date: Fri, 5 Dec 2025 09:08:10 +0100 Subject: [PATCH] feat: solve part two using merged ranges --- internal/2025/DayFive/code.go | 48 ++++++++++++++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/internal/2025/DayFive/code.go b/internal/2025/DayFive/code.go index 293d3f7..9fea9cc 100644 --- a/internal/2025/DayFive/code.go +++ b/internal/2025/DayFive/code.go @@ -75,5 +75,51 @@ func PartOne(input []string) int { } func PartTwo(input []string) int { - return 0 + var freshRanges []freshRange + + for _, line := range input { + if line == "" { + break + } + + startStr, endStr, _ := strings.Cut(line, "-") + start, _ := strconv.Atoi(startStr) + end, _ := strconv.Atoi(endStr) + freshRanges = append(freshRanges, freshRange{start: start, end: end}) + } + + slices.SortFunc(freshRanges, func(a, b freshRange) int { + switch { + case a.start < b.start: + return -1 + case a.start > b.start: + return 1 + default: + return 0 + } + }) + + var mergedRanges []freshRange + for _, r := range freshRanges { + if len(mergedRanges) == 0 { + mergedRanges = append(mergedRanges, r) + continue + } + + lastRange := &mergedRanges[len(mergedRanges)-1] + if r.start <= lastRange.end+1 { + if r.end > lastRange.end { + lastRange.end = r.end + } + } else { + mergedRanges = append(mergedRanges, r) + } + } + + totalFreshIDs := 0 + for _, r := range mergedRanges { + totalFreshIDs += r.end - r.start + 1 + } + + return totalFreshIDs }