| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- 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)
- }
|