2022 Days 12 & 13 Complete!
This commit is contained in:
41
2022/day12/input
Normal file
41
2022/day12/input
Normal file
@@ -0,0 +1,41 @@
|
||||
abcccaaaaaaccccccccaaaaaccccccaaaaaaccccccaaaaaaaacccaaaaaaaccaaaacccccccccccccccccccccccccaaaaaacccccccccccccccccccccccccccccaaaaaa
|
||||
abcccaaaaaacccccccaaaaaaccccaaaaaaaacccccccaaaaaaaaaaaaaaaaccaaaaacccccccccccccccccccccccccaaaaaacccccccccccccccccccccccccccccaaaaaa
|
||||
abccccaaaaacaaaccaaaaaaaacccaaaaaaaaacccccccaaaaaaaaaaaaaaaacaaaaaacccccccccaaacccccccccccaaaaaaaaccccccccccaaccccccccccccccccaaaaaa
|
||||
abccccaaaaccaaaaaaaaaaaaacccaaaaaaaaaacccccaaaaaaaaaaaaaaaaaaacaaaacccccccccaaaacccccccccaaaaaaaaaacccccccccaaaccccccccccccccccccaaa
|
||||
abcccccccccaaaaaacccaacccccccccaaacaaaccccccaacccccccaaaaaaaaacaacccccccccccaaaacccccccccaaaaaaaaaacccccccccaaaccacaaccccccccccccaaa
|
||||
abcccccccccaaaaaacccaacccccccccaaacccccccccccccccccccaaaacaaaacccccccaacaaccaaaccccccccccaccaaaaacacccccccccaaaacaaaaccccccccccccaac
|
||||
abccccccccccaaaaacccccccccccccccacccaaaacccccccccccccaaaacccccccccccccaaaacccccccccccaacccccaaaaccccccccjjjjaaaaaaaaaccccccccccccccc
|
||||
abccccccccccaaaacccccccccccccccccccaaaaacccccccccccccaaaccccccccccccccaaaaacccccccccaaaaaacccaaccccccccjjjjjjkkaaaacccccccccaacccccc
|
||||
abcccccaaccccccccccccccccccccccccccaaaaaacccccccccccccaacccccccccccccaaaaaaccccccccccaaaaaccccccccccccjjjjjjjkkkkaacccccaacaaacccccc
|
||||
abccaaaacccccccccccccccccccccccccccaaaaaaccccccccccccccccccccccccccccaaaacaccccccccaaaaaaaccccaacccccjjjjoooookkkkkkkklllaaaaaaacccc
|
||||
abccaaaaaacccccccccccccccccccccccccaaaaacccccccccccccccccccccccccccccccaaccccccccccaaaaaaaaccaaaaccccjjjoooooookkkkkkkllllaaaaaacccc
|
||||
abcccaaaaacccccccccccccccccccccccccccaaaccccccccaaaacccccccccccccccccccccccccccccccaaaaaaaaccaaaaccccjjooooooooppkkppplllllaccaacccc
|
||||
abccaaaaaccccccccccccaccccccccccccccccccccccccccaaaacccccccccccccccccccccccccccccccccaaacacccaaaacccijjooouuuuoppppppppplllccccccccc
|
||||
abcccccaacccccccccccaaaaaaaaccccccccccccccccccccaaaaccccaaccccccccaaacccccccccccccaacaaccccccccccccciijoouuuuuuppppppppplllcccaccccc
|
||||
abcccccccccccccccccccaaaaaaccccccccccccccccccccccaaccccaaaacccccccaaaaccccccccccaaaaaaccccccccccccciiiiootuuuuuupuuuvvpppllccccccccc
|
||||
abcccccccccccccccccccaaaaaaccaaaaacccccccccccccccccccccaaaacccccccaaaaccccccccccaaaaaaccccccccccccciiinnotuuxxxuuuuvvvpppllccccccccc
|
||||
abccccccccccccccacccaaaaaaaacaaaaaaacccccccccccccccccccaaaacccccccaaacccccaaaaccaaaaaccccaaccccccciiiinnnttxxxxuuyyyvvqqqllccccccccc
|
||||
abcccccccccccaaaaccaaaaaaaaaaaaaaaaaaccaacccccccccccccccccccccccccccccccccaaaacccaaaaaccaaacccccciiinnnnnttxxxxxyyyyvvqqqllccccccccc
|
||||
abaaaacccccccaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccccccccccccccccccccccccccaaaacccaaaaaacaaaccccciiinnnnttttxxxxxyyyyvvqqmmmccccccccc
|
||||
abaaaaccccccccaaaaacccaaaaacaaaaaacaaaaaaccccccccccccccccaaccccccccccccccccaacccccccaaaaaaaaaaciiinnnnttttxxxxxyyyyvvqqqmmmccccccccc
|
||||
SbaaaacccccccaaaaaccccaaaaaccaaaaaaaaaaaccccccccccccccccaaacaacccccccccccccccccccccccaaaaaaaaachhhnnntttxxxEzzzzyyvvvqqqmmmccccccccc
|
||||
abaaaacccccccaacaacccccaaaaaaaacaaaaaaaaaccccccccccccccccaaaaaccccccccccccccccccccccccaaaaaaacchhhnnntttxxxxxyyyyyyvvvqqmmmdddcccccc
|
||||
abaaaacccccccccccccccccccaaaaaacaaaaaaaaaacccccccccccccaaaaaaccccccccaaaccccccccccccccaaaaaaccchhhnnntttxxxxywyyyyyyvvvqqmmmdddccccc
|
||||
abaacccccccccccccccccccaaaaaaacccccaaaaaaacccccccccccccaaaaaaaacccccaaaacccccccccccccaaaaaaacaahhhmmmttttxxwwyyyyyyyvvvqqmmmdddccccc
|
||||
abcccccccccccccccccccccaaaaaaacaaccaaacccccccccccccccccaacaaaaacccccaaaacccccccccccccaaacaaaaaahhhmmmmtsssswwyywwwwvvvvqqqmmdddccccc
|
||||
abcccccccccccccccaaaccccaaaaaaaaaacaaccaaccccccccccccccccaaacaccccccaaaacccccccccccccccccaaaaacahhhmmmmmsssswwywwwwwvvrrqqmmdddccccc
|
||||
abcccccccccccccaaaaaaccccaaaaaaaaaccaaaacccccccccccccccccaacccccccccccccccccccccccaaaccccaaaaaaahhhhhmmmmssswwwwwrrrrrrrrmmmmddccccc
|
||||
abcccccccccccccaaaaaaccccaaaaaaaaaaaaaaaaaccccccccccccccccccccccccccccccccccccccaaaaaacccccaaaaachhhhhmmmmsswwwwrrrrrrrrrkkmdddccccc
|
||||
abccccccccccccccaaaaaccccccaaaaaaaaaaaaaaaccccccccccccccccccccccccccccccccccccccaaaaaaccccaaaaacccchhggmmmssswwrrrrrkkkkkkkkdddacccc
|
||||
abccaaaacccccccaaaaacccccccccaaaaaacaaaaacccccccccccccccccccccccccccccccccccccccaaaaaaccccaacaaaccccggggmmsssssrrlkkkkkkkkkdddaccccc
|
||||
abccaaaacccccccaaaaacccccccccaaaaaaccccaacccccccccccccccccccccccccccccccccccccccaaaaaccccccccaaccccccgggmllssssrllkkkkkkkeeeddaccccc
|
||||
abccaaaacccccccaaacccccccccccaaaaaacccccccccccccccccccaacccccccccccccccccccccccaaaaaacccccccccccccccccggllllssslllkkeeeeeeeeeaaacccc
|
||||
abcccaaccccccccaaacaaaccccccaaaaaaaaaaacccccccccccccaaaaaacccccccccccccccccccccaaacaaacccccaacccccccccggglllllllllfeeeeeeeeaaaaacccc
|
||||
abccccccccccaaaaaaaaaaccccccccccccaccaaaccacccccccccaaaaaaccccaaccaacccaaccccccaaaaaaacccccaaccccccccccggglllllllfffeeecccaaaaaacccc
|
||||
abccccccccccaaaaaaaaacccccccccccccccaaaaaaaccccccccccaaaaaccccaaaaaacccaaaaaaccaaaaaacccaaaaaaaacccccccggggllllfffffccccccaacccccccc
|
||||
abcccccccccccaaaaaaacccccccccccccccccaaaaaaccaacccccaaaaaccccccaaaaacccaaaaaacaaaaaaacccaaaaaaaaccccccccgggffffffffccccccccccccccccc
|
||||
abccccccccccccaaaaaaacccccccccccccaaaaaaaaacaaaaccccaaaaacaaaaaaaaaacaaaaaaacaaaaaaaaaccccaaaacccccccccccggffffffacccccccccccccccaaa
|
||||
abccccccccccccaaaaaaacaaccccccccccaaaaaaaaacaaaacccccaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaacccaaaaacccccccccccaffffaaaaccccccccccccccaaa
|
||||
abccccccccccccaaacaaaaaacccccccccccaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaacccaaacaaaccaaaaaacccccccccccccccccaaaccccccccccccccaaa
|
||||
abccccccccccccaaccaaaaaccccccccccccccaaaaaaaccccaaaaaaaaaaaaccccaacccccaaaaaacccaaaccccccaaccaacccccccccccccccccaaacccccccccccaaaaaa
|
||||
abcccccccccccccccaaaaaaaaccccccccccccaacccacccccccaaaaaaaaaaccccaacccccaaccccccccaccccccccccccccccccccccccccccccccccccccccccccaaaaaa
|
87
2022/day12/main.go
Normal file
87
2022/day12/main.go
Normal file
@@ -0,0 +1,87 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"math"
|
||||
|
||||
h "git.bullercodeworks.com/brian/adventofcode/helpers"
|
||||
)
|
||||
|
||||
func main() {
|
||||
inp := h.StdinToStringSlice()
|
||||
part1(inp)
|
||||
fmt.Println()
|
||||
part2(inp)
|
||||
}
|
||||
|
||||
func part1(inp []string) {
|
||||
m := h.StringSliceToCoordByteMap(inp)
|
||||
start, _ := m.FindFirst('S')
|
||||
m.Put(start, 'a')
|
||||
end, _ := m.FindFirst('E')
|
||||
m.Put(end, 'z')
|
||||
|
||||
fmt.Println("# Part 1")
|
||||
fmt.Println("Steps:", bfs(m, start, end))
|
||||
}
|
||||
|
||||
func part2(inp []string) {
|
||||
m := h.StringSliceToCoordByteMap(inp)
|
||||
starts := m.FindAll('a')
|
||||
if s, err := m.FindFirst('S'); err == nil {
|
||||
m.Put(s, 'a')
|
||||
starts = append(starts, s)
|
||||
}
|
||||
end, _ := m.FindFirst('E')
|
||||
m.Put(end, 'z')
|
||||
|
||||
minSteps := math.MaxInt
|
||||
for _, start := range starts {
|
||||
curSteps := bfs(m, start, end)
|
||||
if minSteps > curSteps {
|
||||
minSteps = curSteps
|
||||
}
|
||||
}
|
||||
fmt.Println("# Part 2")
|
||||
fmt.Println("Steps:", minSteps)
|
||||
}
|
||||
|
||||
func bfs(m h.CoordByteMap, start, end h.Coordinate) int {
|
||||
seen := make(map[h.Coordinate]bool)
|
||||
seen[start] = true
|
||||
queue := []h.Coordinate{start}
|
||||
steps := 0
|
||||
found := false
|
||||
// BFS Search
|
||||
SEARCH:
|
||||
for len(queue) > 0 {
|
||||
k := len(queue)
|
||||
for i := 0; i < k; i++ {
|
||||
curr := queue[0]
|
||||
currVal := m.Get(curr)
|
||||
queue = queue[1:]
|
||||
if end.Equals(curr) {
|
||||
found = true
|
||||
break SEARCH
|
||||
}
|
||||
for _, dir := range curr.GetOrthNeighbors() {
|
||||
if !m.ContainsCoord(dir) || seen[dir] {
|
||||
continue
|
||||
}
|
||||
newVal := m.Get(dir)
|
||||
greater := m.Get(dir) > currVal
|
||||
if greater && newVal-currVal > 1 {
|
||||
continue
|
||||
}
|
||||
seen[dir] = true
|
||||
queue = append(queue, dir)
|
||||
}
|
||||
}
|
||||
steps++
|
||||
}
|
||||
if !found {
|
||||
//fmt.Println("Path from", start, "to", end, "not found!")
|
||||
return math.MaxInt
|
||||
}
|
||||
return steps
|
||||
}
|
109
2022/day12/problem
Normal file
109
2022/day12/problem
Normal file
@@ -0,0 +1,109 @@
|
||||
Advent of Code
|
||||
br0xen (AoC++) 26*
|
||||
|
||||
--- Day 12: Hill Climbing Algorithm ---
|
||||
|
||||
You try contacting the Elves using your handheld device, but the river you're following must be
|
||||
too low to get a decent signal.
|
||||
|
||||
You ask the device for a heightmap of the surrounding area (your puzzle input). The heightmap
|
||||
shows the local area from above broken into a grid; the elevation of each square of the grid is
|
||||
given by a single lowercase letter, where a is the lowest elevation, b is the next-lowest, and
|
||||
so on up to the highest elevation, z.
|
||||
|
||||
Also included on the heightmap are marks for your current position (S) and the location that
|
||||
should get the best signal (E). Your current position (S) has elevation a, and the location that
|
||||
should get the best signal (E) has elevation z.
|
||||
|
||||
You'd like to reach E, but to save energy, you should do it in as few steps as possible. During
|
||||
each step, you can move exactly one square up, down, left, or right. To avoid needing to get out
|
||||
your climbing gear, the elevation of the destination square can be at most one higher than the
|
||||
elevation of your current square; that is, if your current elevation is m, you could step to
|
||||
elevation n, but not to elevation o. (This also means that the elevation of the destination
|
||||
square can be much lower than the elevation of your current square.)
|
||||
|
||||
For example:
|
||||
|
||||
Sabqponm
|
||||
abcryxxl
|
||||
accszExk
|
||||
acctuvwj
|
||||
abdefghi
|
||||
|
||||
Here, you start in the top-left corner; your goal is near the middle. You could start by moving
|
||||
down or right, but eventually you'll need to head toward the e at the bottom. From there, you
|
||||
can spiral around to the goal:
|
||||
|
||||
v..v<<<<
|
||||
>v.vv<<^
|
||||
.>vv>E^^
|
||||
..v>>>^^
|
||||
..>>>>>^
|
||||
|
||||
In the above diagram, the symbols indicate whether the path exits each square moving up (^),
|
||||
down (v), left (<), or right (>). The location that should get the best signal is still E, and .
|
||||
marks unvisited squares.
|
||||
|
||||
This path reaches the goal in 31 steps, the fewest possible.
|
||||
|
||||
What is the fewest steps required to move from your current position to the location that should
|
||||
get the best signal?
|
||||
|
||||
Your puzzle answer was 449.
|
||||
|
||||
--- Part Two ---
|
||||
|
||||
As you walk up the hill, you suspect that the Elves will want to turn this into a hiking trail.
|
||||
The beginning isn't very scenic, though; perhaps you can find a better starting point.
|
||||
|
||||
To maximize exercise while hiking, the trail should start as low as possible: elevation a. The
|
||||
goal is still the square marked E. However, the trail should still be direct, taking the fewest
|
||||
steps to reach its goal. So, you'll need to find the shortest path from any square at elevation
|
||||
a to the square marked E.
|
||||
|
||||
Again consider the example from above:
|
||||
|
||||
Sabqponm
|
||||
abcryxxl
|
||||
accszExk
|
||||
acctuvwj
|
||||
abdefghi
|
||||
|
||||
Now, there are six choices for starting position (five marked a, plus the square marked S that
|
||||
counts as being at elevation a). If you start at the bottom-left square, you can reach the goal
|
||||
most quickly:
|
||||
|
||||
...v<<<<
|
||||
...vv<<^
|
||||
...v>E^^
|
||||
.>v>>>^^
|
||||
>^>>>>>^
|
||||
|
||||
This path reaches the goal in only 29 steps, the fewest possible.
|
||||
|
||||
What is the fewest steps required to move starting from any square with elevation a to the
|
||||
location that should get the best signal?
|
||||
|
||||
Your puzzle answer was 443.
|
||||
|
||||
Both parts of this puzzle are complete! They provide two gold stars: **
|
||||
|
||||
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
|
||||
. https://adventofcode.com/2022/day/12/input
|
5
2022/day12/testinput
Normal file
5
2022/day12/testinput
Normal file
@@ -0,0 +1,5 @@
|
||||
Sabqponm
|
||||
abcryxxl
|
||||
accszExk
|
||||
acctuvwj
|
||||
abdefghi
|
Reference in New Issue
Block a user