2022 Day 4 Complete!
This commit is contained in:
parent
e1bfbcde97
commit
9a3a29d7df
1000
2022/day04/input
Normal file
1000
2022/day04/input
Normal file
File diff suppressed because it is too large
Load Diff
83
2022/day04/main.go
Normal file
83
2022/day04/main.go
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
h "git.bullercodeworks.com/brian/adventofcode/helpers"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
inp := h.StdinToStringSlice()
|
||||||
|
part1(inp)
|
||||||
|
part2(inp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func part1(inp []string) {
|
||||||
|
fmt.Println("# Part 1")
|
||||||
|
var ret int
|
||||||
|
for _, pair := range inp {
|
||||||
|
elves := strings.Split(pair, ",")
|
||||||
|
e1S, e1E := getRange(elves[0])
|
||||||
|
e2S, e2E := getRange(elves[1])
|
||||||
|
if rangesFullyOverlap(e1S, e1E, e2S, e2E) {
|
||||||
|
ret++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fmt.Printf("Fully Overlapping Ranges: %d\n", ret)
|
||||||
|
}
|
||||||
|
|
||||||
|
func part2(inp []string) {
|
||||||
|
fmt.Println("# Part 2")
|
||||||
|
var ret int
|
||||||
|
for _, pair := range inp {
|
||||||
|
elves := strings.Split(pair, ",")
|
||||||
|
e1S, e1E := getRange(elves[0])
|
||||||
|
e2S, e2E := getRange(elves[1])
|
||||||
|
if rangesOverlap(e1S, e1E, e2S, e2E) {
|
||||||
|
ret++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fmt.Printf("Overlapping Ranges: %d\n", ret)
|
||||||
|
}
|
||||||
|
|
||||||
|
func partXAllOverlaps(inp []string) {
|
||||||
|
fmt.Println("# Part x")
|
||||||
|
var overlaps int
|
||||||
|
sections := make(map[int]int)
|
||||||
|
for _, pair := range inp {
|
||||||
|
elves := strings.Split(pair, ",")
|
||||||
|
for elfIdx, elf := range elves {
|
||||||
|
var overlapped bool
|
||||||
|
i1, i2 := getRange(elf)
|
||||||
|
for i := i1; i <= i2; i++ {
|
||||||
|
if _, ok := sections[i]; ok {
|
||||||
|
overlapped = true
|
||||||
|
} else {
|
||||||
|
sections[i] = elfIdx
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if overlapped {
|
||||||
|
overlaps++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fmt.Printf("Overlapping Assignments: %d\n", overlaps)
|
||||||
|
}
|
||||||
|
|
||||||
|
func rangesFullyOverlap(e1start, e1end, e2start, e2end int) bool {
|
||||||
|
return (e1start >= e2start && e1end <= e2end) ||
|
||||||
|
(e2start >= e1start && e2end <= e1end)
|
||||||
|
}
|
||||||
|
func rangesOverlap(e1start, e1end, e2start, e2end int) bool {
|
||||||
|
ret := (e1start >= e2start && e1start <= e2end) ||
|
||||||
|
(e1end >= e2start && e1end <= e2end) ||
|
||||||
|
(e2start >= e1start && e2start <= e1end) ||
|
||||||
|
(e2end >= e1start && e2end <= e1end)
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
|
func getRange(elf string) (int, int) {
|
||||||
|
idxsS := strings.Split(elf, "-")
|
||||||
|
return h.Atoi(idxsS[0]), h.Atoi(idxsS[1])
|
||||||
|
}
|
106
2022/day04/problem
Normal file
106
2022/day04/problem
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
Advent of Code
|
||||||
|
|
||||||
|
br0xen (AoC++) 7*
|
||||||
|
|
||||||
|
--- Day 4: Camp Cleanup ---
|
||||||
|
|
||||||
|
Space needs to be cleared before the last supplies can be unloaded from the ships, and so several Elves have been
|
||||||
|
assigned the job of cleaning up sections of the camp. Every section has a unique ID number, and each Elf is assigned a
|
||||||
|
range of section IDs.
|
||||||
|
|
||||||
|
However, as some of the Elves compare their section assignments with each other, they've noticed that many of the
|
||||||
|
assignments overlap. To try to quickly find overlaps and reduce duplicated effort, the Elves pair up and make a big list
|
||||||
|
of the section assignments for each pair (your puzzle input).
|
||||||
|
|
||||||
|
For example, consider the following list of section assignment pairs:
|
||||||
|
|
||||||
|
2-4,6-8
|
||||||
|
2-3,4-5
|
||||||
|
5-7,7-9
|
||||||
|
2-8,3-7
|
||||||
|
6-6,4-6
|
||||||
|
2-6,4-8
|
||||||
|
|
||||||
|
For the first few pairs, this list means:
|
||||||
|
|
||||||
|
• Within the first pair of Elves, the first Elf was assigned sections 2-4 (sections 2, 3, and 4), while the second Elf
|
||||||
|
was assigned sections 6-8 (sections 6, 7, 8).
|
||||||
|
• The Elves in the second pair were each assigned two sections.
|
||||||
|
• The Elves in the third pair were each assigned three sections: one got sections 5, 6, and 7, while the other also
|
||||||
|
got 7, plus 8 and 9.
|
||||||
|
|
||||||
|
This example list uses single-digit section IDs to make it easier to draw; your actual list might contain larger
|
||||||
|
numbers. Visually, these pairs of section assignments look like this:
|
||||||
|
|
||||||
|
.234..... 2-4
|
||||||
|
.....678. 6-8
|
||||||
|
|
||||||
|
.23...... 2-3
|
||||||
|
...45.... 4-5
|
||||||
|
|
||||||
|
....567.. 5-7
|
||||||
|
......789 7-9
|
||||||
|
|
||||||
|
.2345678. 2-8
|
||||||
|
..34567.. 3-7
|
||||||
|
|
||||||
|
.....6... 6-6
|
||||||
|
...456... 4-6
|
||||||
|
|
||||||
|
.23456... 2-6
|
||||||
|
...45678. 4-8
|
||||||
|
|
||||||
|
Some of the pairs have noticed that one of their assignments fully contains the other. For example, 2-8 fully contains
|
||||||
|
3-7, and 6-6 is fully contained by 4-6. In pairs where one assignment fully contains the other, one Elf in the pair
|
||||||
|
would be exclusively cleaning sections their partner will already be cleaning, so these seem like the most in need of
|
||||||
|
reconsideration. In this example, there are 2 such pairs.
|
||||||
|
|
||||||
|
In how many assignment pairs does one range fully contain the other?
|
||||||
|
|
||||||
|
Your puzzle answer was 503.
|
||||||
|
|
||||||
|
The first half of this puzzle is complete! It provides one gold star: *
|
||||||
|
|
||||||
|
--- Part Two ---
|
||||||
|
|
||||||
|
It seems like there is still quite a bit of duplicate work planned. Instead, the Elves would like to know the number of
|
||||||
|
pairs that overlap at all.
|
||||||
|
|
||||||
|
In the above example, the first two pairs (2-4,6-8 and 2-3,4-5) don't overlap, while the remaining four pairs (5-7,7-9,
|
||||||
|
2-8,3-7, 6-6,4-6, and 2-6,4-8) do overlap:
|
||||||
|
|
||||||
|
• 5-7,7-9 overlaps in a single section, 7.
|
||||||
|
• 2-8,3-7 overlaps all of the sections 3 through 7.
|
||||||
|
• 6-6,4-6 overlaps in a single section, 6.
|
||||||
|
• 2-6,4-8 overlaps in sections 4, 5, and 6.
|
||||||
|
|
||||||
|
So, in this example, the number of overlapping assignment pairs is 4.
|
||||||
|
|
||||||
|
In how many assignment pairs do the ranges overlap?
|
||||||
|
|
||||||
|
Your puzzle answer was 827.
|
||||||
|
|
||||||
|
Both parts of this puzzle are complete! They provide two gold stars: **
|
||||||
|
|
||||||
|
At this point, you should return to your Advent calendar and try another puzzle.
|
||||||
|
|
||||||
|
If you still want to see it, you can get your puzzle input.
|
||||||
|
|
||||||
|
References
|
||||||
|
|
||||||
|
Visible links
|
||||||
|
. https://adventofcode.com/
|
||||||
|
. https://adventofcode.com/2022/about
|
||||||
|
. https://adventofcode.com/2022/events
|
||||||
|
. https://adventofcode.com/2022/settings
|
||||||
|
. https://adventofcode.com/2022/auth/logout
|
||||||
|
. Advent of Code Supporter
|
||||||
|
https://adventofcode.com/2022/support
|
||||||
|
. https://adventofcode.com/2022
|
||||||
|
. https://adventofcode.com/2022
|
||||||
|
. https://adventofcode.com/2022/support
|
||||||
|
. https://adventofcode.com/2022/sponsors
|
||||||
|
. https://adventofcode.com/2022/leaderboard
|
||||||
|
. https://adventofcode.com/2022/stats
|
||||||
|
. https://adventofcode.com/2022/sponsors
|
||||||
|
. https://adventofcode.com/2022/day/4/input
|
6
2022/day04/testinput
Normal file
6
2022/day04/testinput
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
2-4,6-8
|
||||||
|
2-3,4-5
|
||||||
|
5-7,7-9
|
||||||
|
2-8,3-7
|
||||||
|
6-6,4-6
|
||||||
|
2-6,4-8
|
Loading…
Reference in New Issue
Block a user