diff --git a/05/main.go b/05/main.go index c326531..eb0378b 100644 --- a/05/main.go +++ b/05/main.go @@ -29,9 +29,7 @@ func parseRange(r string) Range { } func main() { - rows := aoc.ReadFileRows(true) - - fmt.Println(rows) + rows := aoc.ReadFileRows(false) ranges := []Range{} @@ -46,11 +44,69 @@ func main() { } } - ids := make([]int, len(rows)-idsStartIndex) + for { + deleteIndex := -1 - for ii, rr := range rows[idsStartIndex:] { + for ii, rngBasis := range ranges { + for jj, rngCompare := range ranges { + if ii != jj { + if rngCompare.From >= rngBasis.From && rngCompare.From <= rngBasis.To && rngCompare.To > rngBasis.To { + ranges[ii].To = rngCompare.To + + deleteIndex = jj + } + + if rngCompare.To >= rngBasis.From && rngCompare.To <= rngBasis.To && rngCompare.From < rngBasis.From { + ranges[ii].From = rngCompare.From + + deleteIndex = jj + } + + if rngCompare.From <= rngBasis.From && rngCompare.To >= rngBasis.To { + ranges[ii] = rngCompare + + deleteIndex = jj + } + + if deleteIndex != -1 { + break + } + } + + if deleteIndex != -1 { + break + } + } + } + + if deleteIndex != -1 { + ranges[deleteIndex] = ranges[len(ranges)-1] + ranges = ranges[:len(ranges)-1] + } else { + break + } } - fmt.Println(ranges) - fmt.Println(ids) + freshCounter := 0 + + for _, sID := range rows[idsStartIndex:] { + id := aoc.ParseInt(sID) + + for _, goodRange := range ranges { + if id >= goodRange.From && id <= goodRange.To { + freshCounter++ + + break + } + } + } + + freshIDCount := 0 + + for _, rng := range ranges { + freshIDCount += rng.To - rng.From + 1 + } + + fmt.Println(freshCounter) + fmt.Println(freshIDCount) } diff --git a/pkg/aoc/parse.go b/pkg/aoc/parse.go new file mode 100644 index 0000000..d031893 --- /dev/null +++ b/pkg/aoc/parse.go @@ -0,0 +1,11 @@ +package aoc + +import "strconv" + +func ParseInt(s string) int { + if i, err := strconv.Atoi(s); err != nil { + panic(err) + } else { + return i + } +}