Skip to content

Commit 6924fc5

Browse files
committed
Day 4
1 parent f4d73a4 commit 6924fc5

File tree

3 files changed

+1079
-0
lines changed

3 files changed

+1079
-0
lines changed

04/day4.go

+73
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
"strconv"
6+
"strings"
7+
8+
utils "github.com/cjavad/advent_of_code_2022"
9+
)
10+
11+
func main() {
12+
part1()
13+
part2()
14+
}
15+
16+
func part1() {
17+
sum := 0
18+
lines := utils.ReadInput("input.txt")
19+
pair_ranges := parse_pair_ranges(lines)
20+
for _, pair_range := range pair_ranges {
21+
if range_is_contained(pair_range[0], pair_range[1]) {
22+
sum += 1
23+
}
24+
}
25+
26+
fmt.Println(sum)
27+
}
28+
29+
func part2() {
30+
sum := 0
31+
lines := utils.ReadInput("input.txt")
32+
pair_ranges := parse_pair_ranges(lines)
33+
for _, pair_range := range pair_ranges {
34+
if range_is_overlapping(pair_range[0], pair_range[1]) {
35+
sum += 1
36+
}
37+
}
38+
39+
fmt.Println(sum)
40+
}
41+
42+
func parse_pair_ranges(input []string) [][][2]int {
43+
pair_ranges := make([][][2]int, 0)
44+
for _, line := range input {
45+
if line == "" {
46+
continue
47+
}
48+
49+
pairs := strings.Split(line, ",")
50+
pair_range := make([][2]int, 0)
51+
for _, pair := range pairs {
52+
pair_range = append(pair_range, parse_range(pair))
53+
}
54+
pair_ranges = append(pair_ranges, pair_range)
55+
}
56+
return pair_ranges
57+
}
58+
59+
func parse_range(input string) [2]int {
60+
input = strings.Trim(input, " ")
61+
pair := strings.Split(input, "-")
62+
lower, _ := strconv.Atoi(pair[0])
63+
upper, _ := strconv.Atoi(pair[1])
64+
return [2]int{lower, upper}
65+
}
66+
67+
func range_is_contained(a, b [2]int) bool {
68+
return a[0] >= b[0] && a[1] <= b[1] || b[0] >= a[0] && b[1] <= a[1]
69+
}
70+
71+
func range_is_overlapping(a, b [2]int) bool {
72+
return a[0] <= b[0] && a[1] >= b[0] || b[0] <= a[0] && b[1] >= a[0]
73+
}

04/input.test.txt

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
2-4,6-8
2+
2-3,4-5
3+
5-7,7-9
4+
2-8,3-7
5+
6-6,4-6
6+
2-6,4-8

0 commit comments

Comments
 (0)