|
|
@@ -0,0 +1,65 @@
|
|
|
+package main
|
|
|
+
|
|
|
+import (
|
|
|
+ "bufio"
|
|
|
+ "fmt"
|
|
|
+ "os"
|
|
|
+ "sort"
|
|
|
+ "strconv"
|
|
|
+ "strings"
|
|
|
+)
|
|
|
+
|
|
|
+type interval struct {
|
|
|
+ lb,ub int64
|
|
|
+}
|
|
|
+
|
|
|
+type sinterval []interval
|
|
|
+
|
|
|
+func (a sinterval) Len() int { return len(a)}
|
|
|
+func (a sinterval) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
|
|
|
+func (a sinterval) Less(i, j int) bool { return a[i].lb < a[j].lb }
|
|
|
+
|
|
|
+func main(){
|
|
|
+ fmt.Println("Advent of Code 2025 - Day 5 - Part 2")
|
|
|
+ f,_:= os.Open("5/input")
|
|
|
+ defer f.Close()
|
|
|
+ scanner := bufio.NewScanner(f)
|
|
|
+
|
|
|
+ var ranges []interval;
|
|
|
+
|
|
|
+ for scanner.Scan(){
|
|
|
+ line := scanner.Text()
|
|
|
+ if (len(line) == 0){
|
|
|
+ break
|
|
|
+ }
|
|
|
+ line_split := strings.Split(line, "-")
|
|
|
+ lb,_ := strconv.ParseInt(line_split[0],10,64)
|
|
|
+ ub,_ := strconv.ParseInt(line_split[1],10,64)
|
|
|
+ ranges = append(ranges, interval{lb,ub})
|
|
|
+ }
|
|
|
+
|
|
|
+ res := int64(0)
|
|
|
+ sort.Sort(sinterval(ranges))
|
|
|
+
|
|
|
+ var compressed_ranges []interval;
|
|
|
+ for _, itvl := range ranges{
|
|
|
+ if (len(compressed_ranges)==0){
|
|
|
+ compressed_ranges = append(compressed_ranges, itvl)
|
|
|
+ } else {
|
|
|
+ last_compressed := &compressed_ranges[len(compressed_ranges)-1]
|
|
|
+ if (last_compressed.ub >= itvl.lb){
|
|
|
+ last_compressed.ub = max(itvl.ub, last_compressed.ub)
|
|
|
+ } else {
|
|
|
+ compressed_ranges = append(compressed_ranges, itvl)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ for _,itvl := range compressed_ranges{
|
|
|
+ res += itvl.ub - itvl.lb + 1
|
|
|
+ }
|
|
|
+
|
|
|
+ fmt.Println(res)
|
|
|
+}
|
|
|
+
|
|
|
+
|