File tree Expand file tree Collapse file tree 2 files changed +29
-21
lines changed
Expand file tree Collapse file tree 2 files changed +29
-21
lines changed Original file line number Diff line number Diff line change 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
Original file line number Diff line number Diff 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
You can’t perform that action at this time.
0 commit comments