Skip to content

Commit 941b56b

Browse files
committed
feat(spans): Add Contains()
1 parent b13d9ea commit 941b56b

File tree

2 files changed

+29
-21
lines changed

2 files changed

+29
-21
lines changed

angch/2025-05/main.go

Lines changed: 6 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import (
66
"log"
77
"os"
88
"strconv"
9-
"strings"
109
"time"
1110

1211
"github.com/angch/adventofcode/angch/span"
@@ -20,42 +19,28 @@ func day5(file string) (part1, part2 int) {
2019
defer f.Close()
2120
scanner := bufio.NewScanner(f)
2221

23-
spans := [][2]int{}
22+
spans := span.NewSpans[bool]()
2423
for scanner.Scan() {
2524
t := scanner.Text()
26-
_ = t
2725
if t == "" {
2826
break
2927
}
30-
l_, r_, ok := strings.Cut(t, "-")
31-
_ = ok
32-
l, _ := strconv.Atoi(l_)
33-
r, _ := strconv.Atoi(r_)
34-
spans = append(spans, [2]int{l, r})
28+
l, r := 0, 0
29+
fmt.Sscanf(t, "%d-%d", &l, &r)
30+
spans = spans.AddCompress(l, r, true)
3531
}
36-
// log.Println(spans)
3732

3833
for scanner.Scan() {
3934
t := scanner.Text()
40-
_ = t
4135
i, _ := strconv.Atoi(t)
42-
for _, v := range spans {
43-
if i >= v[0] && i <= v[1] {
44-
part1++
45-
break
46-
}
36+
if spans.Contains(i) {
37+
part1++
4738
}
4839
}
4940

50-
s2 := span.NewSpans[bool]()
5141
for _, v := range spans {
52-
s2 = s2.AddCompress(v[0], v[1], true)
53-
log.Printf("%+v\n", s2)
54-
}
55-
for _, v := range s2 {
5642
part2 += v.To - v.From + 1
5743
}
58-
5944
return
6045
}
6146

angch/span/span.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,4 +83,27 @@ compress:
8383
return s
8484
}
8585

86+
func (s Spans[T]) Contains(i int) bool {
87+
// binary search
88+
l, r := 0, len(s)
89+
for l < r {
90+
mid := l + (r-l)/2
91+
92+
if mid >= len(s) {
93+
return false
94+
}
95+
96+
diff := s[mid].From - i
97+
if diff <= 0 && s[mid].To >= i {
98+
return true
99+
}
100+
if diff <= 0 {
101+
l = mid + 1
102+
} else {
103+
r = mid
104+
}
105+
}
106+
return false
107+
}
108+
86109
// Initial conversion from 2022-15 code to type param'd Spans

0 commit comments

Comments
 (0)