Files
advent-of-code-2022/day04/common/section.go
2022-12-15 14:56:28 +01:00

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
}