Day 4
This commit is contained in:
48
day04/common/section.go
Normal file
48
day04/common/section.go
Normal file
@@ -0,0 +1,48 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user