2022 day 12
This commit is contained in:
41
2022/12/input
Normal file
41
2022/12/input
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
abccccccccccccccccaaccccccccccccccccccccaaaaaaaaaaaaacccccccccccccccccccccccccccccccccccccccccccccccccccccccaaaaaa
|
||||||
|
abcccccccccccccaaaaaccccccccccccccccccccaaaaaaaaaaaaaccccccccccccccccccccccccccccccccccccccccccccccccccccccccaaaaa
|
||||||
|
abccccccccccccccaaaaaccccccccccccccaaaaacccaaaaaacccccaaccccccccccccccccccccccccccccccccccccccccccccccccccccccaaaa
|
||||||
|
abccccccccccccccaaaaacccccccccaacccaaaaacccaaaaaaaccccaaaacaacaaccccccccccccccccccccccccaaaccccaaaccccccccccccaaaa
|
||||||
|
abcccccccccccccaaaaacccccccaaaaaccaaaaaacccaaaaaaaacaaaaaacaaaaaccccccccccccccccccccccccaaacccaaaaccccccccccccaaac
|
||||||
|
abccccccaacaaaccccaaccccccccaaaaacaaaaaaccaaaacaaaacaaaaaccaaaaaaccccccccccccccccccccccccaaaaaaaacccccccccccccaacc
|
||||||
|
abccccccaaaaaaccccccccccccccaaaaacaaaaaaccaaaaccaaaacaaaaacaaaaaacccccccccccccccccccccccaaaaaaaaaccccccccccccccccc
|
||||||
|
abccccccaaaaaacccccccccccccaaaaaccccaaccccaacccccaaccaacaacaaaaaccccccccccccccccccccccccccaaakkkkllllcccaaaccccccc
|
||||||
|
abccccccaaaaaaacccccccccccccccaaccccaacccccccccccccccccccccccaaaccccccaaaacccccccccjjjjkkkkkkkkkkllllccccaacaccccc
|
||||||
|
abcccccaaaaaaaacccccaaccccccccccccccaaaaaaccccccccccccccccccaaccccccccaaaaccccccccjjjjjkkkkkkkkkppllllcccaaaaacccc
|
||||||
|
abcccccaaaaaaaaccaaaacccccccccccccccaaaaaccccccccccccccccaacaaccccccccaaaacccccccjjjjjjjkkkkkppppppplllccaaaaacccc
|
||||||
|
abccccccccaaaccccaaaaaacccccccccccaaaaaaaccccccccccccccccaaaaacccccccccaacccccccjjjjoooooooppppppppplllcccaaaccccc
|
||||||
|
abccccccccaaccccccaaaaaccccaacccccaaaaaaaaccccaaacccccccccaaaaaaacccccccccccccccjjjooooooooppppuuppppllcccaaaccccc
|
||||||
|
abccccccaacccccccaaaaacccccaaaccaaaaaaaaaaccaaaaaaccccccaaaaaaaaaacaaaccccccccccjjjoooouuuoopuuuuupppllcccaaaccccc
|
||||||
|
abacccccaaccccccccccaacccccaaaaaaaccaaaaaaccaaaaaaccccccaaaaaccaaaaaaaccccaaccccjjoootuuuuuuuuuuuuvpqlllcccccccccc
|
||||||
|
abaccaaaaaaaacccccccccccccccaaaaaaccaacccccccaaaaacccccccacaaaccaaaaaaccaaaacaccjjooottuuuuuuuxyuvvqqljjccddcccccc
|
||||||
|
abcccaaaaaaaaccccccccccccaaaaaaaaacaacaaccccaaaaaccccccccccaaaaaaaaaacccaaaaaacciijootttxxxuuxyyyvvqqjjjjdddcccccc
|
||||||
|
abcccccaaaaccccaaacccccccaaaaaaaaacaaaaaccccaaaaaccccccccccccaaaaaaaaacccaaaaccciiinntttxxxxxxyyvvqqqqjjjddddccccc
|
||||||
|
abccccaaaaaccccaaaaacccccaaaaaaaaaaaaaaaaccccccccccccccccccccaaaaaaaaaaccaaaaccciiinntttxxxxxxyyvvvqqqqjjjdddccccc
|
||||||
|
abccccaaaaaaccaaaaaccccccccaaaaaaaaaaaaaacccccccccccccccccccccccaaacaaacaacaaccciiinnnttxxxxxyyyvvvvqqqqjjjdddcccc
|
||||||
|
SbccccaaccaaccaaaaacccccccccaaaaaaaaaaaaacccccccccccccccccccccccaaacccccccccccciiinnntttxxxEzzyyyyvvvqqqjjjdddcccc
|
||||||
|
abcccccccccccccaaaaacccccccaaaaaaaaacaaaccccccccccccccccccccccccaaccccccccccccciiinnnttxxxxyyyyyyyyvvvqqqjjjdddccc
|
||||||
|
abcccccccccccccaaccccccccccaaaaaaaaccccccccccccccccccccccccccccccccccccccccccciiinnntttxxyyyyyyyyyvvvvqqqjjjdddccc
|
||||||
|
abccccccccccccccccccccccccaaaaaaaacccccccccccccccccccccccccccccccccccccccccccciiinntttxxxwwwyyywwvvvvrqqjjjjdddccc
|
||||||
|
abcccccccccccccccccccccccccccaaaaaaccccccccccccccccccccccccccccccccccccccccccciinnntttxwwwwwyyywwvvvrrrqkkkeddcccc
|
||||||
|
abcccccccccccccccccccccccccccaaaaaaccccccccccccccccccccccccccccccccccccccccccchhnnntttsswwswwyywwrrrrrrkkkkeeecccc
|
||||||
|
abcccccccccccccccccccccccccccaaaaaacccccccccccccccccccaccccccccccccaaacccccccchhhnmmssssssswwwwwwrrrkkkkkeeeeecccc
|
||||||
|
abcccccccccccccccccccccccccccccaaacccccccccccccccccccaaccccccccccaaaaaacccccaahhhmmmmmsssssswwwwrrrkkkkkeeeeeccccc
|
||||||
|
abaacccccccccccccaccccccccccccccccccccccccccccccccaaaaacaacccccccaaaaaacaaaaaahhhhmmmmmmmmssswwwrrkkkkeeeeeacccccc
|
||||||
|
abacccccccccccccaaaaaaaaccccccccaaacccccccaaccccccaaaaaaaacccccccaaaaaacaaaaaaahhhhmmmmmmmmsssrrrrkkkeeeeeaacccccc
|
||||||
|
abaaaccccaaccccccaaaaaacccccccccaaacccaacaaaccccccccaaaacccccccccaaaaacccaaaaaaahhhhhhhmmmmlsssrrllkfeeeeaaaaacccc
|
||||||
|
abaaaccaaaaccccccaaaaaacccccccccaaaaaaaaaaaaaacccccaaaaacccccccccaaaaacccaaaaaaachhhhhgggmllsssrrllkffeaaaaaaacccc
|
||||||
|
abaacccaaaaaacccaaaaaaaacccccaaaaaaaaaaaaaaaaacccccaacaaacccccccccccccccaaaaaacccccchggggglllllllllfffaaaaaaaacccc
|
||||||
|
abaaccccaaaacccaaaaaaaaaaccccaaaaaaaaacaaaaaaaccaccaccaaacccccccccccccccaaaaaacccccccccgggglllllllffffaaaaaacccccc
|
||||||
|
abcccccaaaaacccaaaaaaaaaacccccaaaaaaaccaaaaacccaaaccccccccccccccccccccccccccaacccccccccagggglllllffffccccaaacccccc
|
||||||
|
abcccccaacaaccccccaaaaacaccaacccaaaaaaaaaaaaaccaaacccccccccccccccccccccccccccccccccccccaagggggffffffcccccccccccccc
|
||||||
|
abcccccccccccaaaaaaaaacccccaaccaaaaaaaccaaaaacaaaaccccccccccccccccccccccccccccccccccccaaaacgggfffffccccccccccccccc
|
||||||
|
abcccccccccccaaaaacaacccaaaaaaaaaaccaacccaaaaaaaacccaaccccccccccccccccccccccccccccccccccccccggfffccccccccccccaaaca
|
||||||
|
abccccccccccaaaaaaccccccaaaaaaaaacccccccccaaaaaaaaaaaacccccccccccccaaaccccccccccccccccccccccaaaccccccccccccccaaaaa
|
||||||
|
abccccccccccaaaaaaccccccccaaaacccccccccccccaaaaaaaaaaaaccccccccccccaaaaccccccccccccccccccccccaaaccccccccccccccaaaa
|
||||||
|
abcccccccccccaaaaacccccccaaaaaaccccccccccaaaaaaaaaaaaaaccccccccccccaaaaccccccccccccccccccccccccccccccccccccccaaaaa
|
63
2022/12/part1
Executable file
63
2022/12/part1
Executable file
@@ -0,0 +1,63 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
import math
|
||||||
|
|
||||||
|
MAP = []
|
||||||
|
START = (0, 0)
|
||||||
|
END = (0, 0)
|
||||||
|
DISTANCES = {}
|
||||||
|
|
||||||
|
def possible(x, y):
|
||||||
|
global MAP
|
||||||
|
|
||||||
|
threshold = MAP[y][x] + 1 # Can't go higher than this, can always go lower
|
||||||
|
points = [(x-1,y),(x+1,y),(x,y-1),(x,y+1)]
|
||||||
|
|
||||||
|
out = []
|
||||||
|
for (x,y) in points:
|
||||||
|
if x < 0 or y < 0:
|
||||||
|
continue
|
||||||
|
if len(MAP) < y+1 or len(MAP[y]) < x+1:
|
||||||
|
continue
|
||||||
|
if MAP[y][x] > threshold:
|
||||||
|
continue
|
||||||
|
|
||||||
|
out.append((x,y))
|
||||||
|
|
||||||
|
return out
|
||||||
|
|
||||||
|
with open('input') as f:
|
||||||
|
for y, line in enumerate(f):
|
||||||
|
row = []
|
||||||
|
for x, byte in enumerate(line.rstrip()):
|
||||||
|
DISTANCES[(x,y)] = math.inf
|
||||||
|
if byte == 'S':
|
||||||
|
byte = 'a'
|
||||||
|
START = (x,y)
|
||||||
|
DISTANCES[START] = 0
|
||||||
|
elif byte == 'E':
|
||||||
|
byte = 'z'
|
||||||
|
END = (x,y)
|
||||||
|
row.append(ord(byte) - ord('a'))
|
||||||
|
MAP.append(row)
|
||||||
|
|
||||||
|
|
||||||
|
visited = set([])
|
||||||
|
queue = [START]
|
||||||
|
|
||||||
|
while len(queue) > 0:
|
||||||
|
pos = queue.pop(0)
|
||||||
|
visited.add(pos)
|
||||||
|
|
||||||
|
for neighbour in possible(*pos):
|
||||||
|
if neighbour == END:
|
||||||
|
print(DISTANCES[pos] + 1)
|
||||||
|
quit()
|
||||||
|
|
||||||
|
if DISTANCES[neighbour] > DISTANCES[pos] + 1:
|
||||||
|
DISTANCES[neighbour] = DISTANCES[pos] + 1
|
||||||
|
|
||||||
|
if neighbour not in visited and neighbour not in queue:
|
||||||
|
queue.append(neighbour)
|
||||||
|
|
||||||
|
print("Couldn't find it!")
|
68
2022/12/part2
Executable file
68
2022/12/part2
Executable file
@@ -0,0 +1,68 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
import math
|
||||||
|
from collections import defaultdict
|
||||||
|
|
||||||
|
MAP = []
|
||||||
|
END = (0, 0)
|
||||||
|
|
||||||
|
def possible(x, y):
|
||||||
|
global MAP
|
||||||
|
|
||||||
|
threshold = MAP[y][x] + 1 # Can't go higher than this, can always go lower
|
||||||
|
points = [(x-1,y),(x+1,y),(x,y-1),(x,y+1)]
|
||||||
|
|
||||||
|
out = []
|
||||||
|
for (x,y) in points:
|
||||||
|
if x < 0 or y < 0:
|
||||||
|
continue
|
||||||
|
if len(MAP) < y+1 or len(MAP[y]) < x+1:
|
||||||
|
continue
|
||||||
|
if MAP[y][x] > threshold:
|
||||||
|
continue
|
||||||
|
out.append((x,y))
|
||||||
|
return out
|
||||||
|
|
||||||
|
with open('input') as f:
|
||||||
|
for y, line in enumerate(f):
|
||||||
|
row = []
|
||||||
|
for x, byte in enumerate(line.rstrip()):
|
||||||
|
if byte == 'S':
|
||||||
|
byte = 'a'
|
||||||
|
elif byte == 'E':
|
||||||
|
byte = 'z'
|
||||||
|
END = (x,y)
|
||||||
|
row.append(ord(byte) - ord('a'))
|
||||||
|
MAP.append(row)
|
||||||
|
|
||||||
|
def search(start):
|
||||||
|
distances = defaultdict(lambda: math.inf)
|
||||||
|
distances[start] = 0
|
||||||
|
visited = set([])
|
||||||
|
queue = [start]
|
||||||
|
|
||||||
|
while len(queue) > 0:
|
||||||
|
pos = queue.pop(0)
|
||||||
|
visited.add(pos)
|
||||||
|
|
||||||
|
for neighbour in possible(*pos):
|
||||||
|
if neighbour == END:
|
||||||
|
return distances[pos] + 1
|
||||||
|
|
||||||
|
if distances[neighbour] > distances[pos] + 1:
|
||||||
|
distances[neighbour] = distances[pos] + 1
|
||||||
|
|
||||||
|
if neighbour not in visited and neighbour not in queue:
|
||||||
|
queue.append(neighbour)
|
||||||
|
|
||||||
|
return None # Some start positions may not have a valid path
|
||||||
|
|
||||||
|
results = []
|
||||||
|
for y, row in enumerate(MAP):
|
||||||
|
for x, height in enumerate(row):
|
||||||
|
if height == 0:
|
||||||
|
result = search((x,y))
|
||||||
|
if result != None:
|
||||||
|
results.append(result)
|
||||||
|
|
||||||
|
print(sorted(results)[0])
|
@@ -9,7 +9,7 @@ a programming language I'm interested in learning more about.
|
|||||||
2018, 2019, and 2020 were in their own separate repositories, but have been
|
2018, 2019, and 2020 were in their own separate repositories, but have been
|
||||||
`git subtree`'d into this one - no point creating a new repository every year.
|
`git subtree`'d into this one - no point creating a new repository every year.
|
||||||
|
|
||||||
* [2022](https://code.ur.gs/lupine/advent-of-code/src/branch/main/2022) 🌟 `22` - Python
|
* [2022](https://code.ur.gs/lupine/advent-of-code/src/branch/main/2022) 🌟 `24` - Python
|
||||||
* [2021](https://code.ur.gs/lupine/advent-of-code/src/branch/main/2021) 🌟 ` 5` - Python
|
* [2021](https://code.ur.gs/lupine/advent-of-code/src/branch/main/2021) 🌟 ` 5` - Python
|
||||||
* [2020](https://code.ur.gs/lupine/advent-of-code/src/branch/main/2020) 🌟 `20` - Javascript
|
* [2020](https://code.ur.gs/lupine/advent-of-code/src/branch/main/2020) 🌟 `20` - Javascript
|
||||||
* [2019](https://code.ur.gs/lupine/advent-of-code/src/branch/main/2019) 🌟 `22` - Zig
|
* [2019](https://code.ur.gs/lupine/advent-of-code/src/branch/main/2019) 🌟 `22` - Zig
|
||||||
@@ -18,6 +18,6 @@ a programming language I'm interested in learning more about.
|
|||||||
* 2016 🌟 `16` - LISP?
|
* 2016 🌟 `16` - LISP?
|
||||||
* 2015 🌟 ` 9` - Ruby?
|
* 2015 🌟 ` 9` - Ruby?
|
||||||
|
|
||||||
Total: 🌟 `100`
|
Total: 🌟 `102`
|
||||||
|
|
||||||
Maybe I'll backfill some of the old years one day.
|
Maybe I'll backfill some of the old years one day.
|
||||||
|
Reference in New Issue
Block a user