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