package main import ( "bufio" "os" "path/filepath" "strconv" "strings" ) var ( f = "../../4.input.txt" ) func must(e error) { if e != nil { panic(e) } } func conv(s string) int { i, err := strconv.Atoi(s) must(err) return i } func main() { fp, err := filepath.Abs(f) must(err) rf, err := os.Open(fp) must(err) s := bufio.NewScanner(rf) s.Split(bufio.ScanLines) split := strings.Split containCount := 0 overlapCount := 0 for s.Scan() { l := s.Text() p := split(l, ",") ids1 := split(p[0], "-") ids2 := split(p[1], "-") id1 := []int{conv(ids1[0]), conv(ids1[1])} id2 := []int{conv(ids2[0]), conv(ids2[1])} if id1[0] <= id2 [0] && id1[1] >= id2[1] || id1[0] >= id2 [0] && id1[1] <= id2[1] { containCount = containCount + 1 } if id1[0] <= id2[1] && id1[1] >= id2[0] { overlapCount = overlapCount + 1 } } println("contains count:", containCount) println("overlaps count:", overlapCount) }