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
|
||||
}
|
||||
21
day04/ex1/main.go
Normal file
21
day04/ex1/main.go
Normal file
@@ -0,0 +1,21 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
"os"
|
||||
"aoc2022/day04/common"
|
||||
)
|
||||
|
||||
func main() {
|
||||
assignmentPairs := common.Parse(*bufio.NewScanner(os.Stdin))
|
||||
sum := 0
|
||||
|
||||
for _, assignmentPair := range assignmentPairs {
|
||||
if assignmentPair.OverlapsFully() {
|
||||
sum++
|
||||
}
|
||||
}
|
||||
|
||||
fmt.Println(sum)
|
||||
}
|
||||
21
day04/ex2/main.go
Normal file
21
day04/ex2/main.go
Normal file
@@ -0,0 +1,21 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
"os"
|
||||
"aoc2022/day04/common"
|
||||
)
|
||||
|
||||
func main() {
|
||||
assignmentPairs := common.Parse(*bufio.NewScanner(os.Stdin))
|
||||
sum := 0
|
||||
|
||||
for _, assignmentPair := range assignmentPairs {
|
||||
if assignmentPair.Overlaps() {
|
||||
sum++
|
||||
}
|
||||
}
|
||||
|
||||
fmt.Println(sum)
|
||||
}
|
||||
Reference in New Issue
Block a user