package common import ( "bufio" "strconv" "strings" ) type Assignment struct { start int end int } func (assignment Assignment) Contains(other Assignment) bool { return assignment.start <= other.start && assignment.end >= other.end } type AssignmentPair struct { assignments [2]Assignment } func (pair AssignmentPair) OverlapsFully() bool { return pair.assignments[0].Contains(pair.assignments[1]) || pair.assignments[1].Contains(pair.assignments[0]) } func (pair AssignmentPair) Overlaps() bool { return (pair.assignments[0].start >= pair.assignments[1].start && pair.assignments[0].start <= pair.assignments[1].end) || (pair.assignments[1].start >= pair.assignments[0].start && pair.assignments[1].start <= pair.assignments[0].end) } func Parse(scanner bufio.Scanner) []AssignmentPair { pairs := []AssignmentPair{} for scanner.Scan() { line := scanner.Text() splittedPair := strings.Split(line, ",") currentAssignmentPair := AssignmentPair{} for i := 0; i < 2; i++ { splittedAssignment := strings.Split(splittedPair[i], "-") start, _ := strconv.Atoi(splittedAssignment[0]) end, _ := strconv.Atoi(splittedAssignment[1]) currentAssignmentPair.assignments[i] = Assignment{start, end} } pairs = append(pairs, currentAssignmentPair) } return pairs }