49 lines
1.3 KiB
Go
49 lines
1.3 KiB
Go
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
|
|
}
|