Solution to problem 9 part 1 in Python
This commit is contained in:
parent
06467e9586
commit
a55487c839
72
src/Year_2021/P9.py
Normal file
72
src/Year_2021/P9.py
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
# --- Day 9: Smoke Basin ---
|
||||||
|
|
||||||
|
# These caves seem to be lava tubes. Parts are even still volcanically active;
|
||||||
|
# small hydrothermal vents release smoke into the caves that slowly settles
|
||||||
|
# like rain.
|
||||||
|
|
||||||
|
# If you can model how the smoke flows through the caves, you might be able to
|
||||||
|
# avoid it and be that much safer. The submarine generates a heightmap of the
|
||||||
|
# floor of the nearby caves for you (your puzzle input).
|
||||||
|
|
||||||
|
# Smoke flows to the lowest point of the area it's in. For example, consider
|
||||||
|
# the following heightmap:
|
||||||
|
|
||||||
|
# 2199943210
|
||||||
|
# 3987894921
|
||||||
|
# 9856789892
|
||||||
|
# 8767896789
|
||||||
|
# 9899965678
|
||||||
|
|
||||||
|
# Each number corresponds to the height of a particular location, where 9 is
|
||||||
|
# the highest and 0 is the lowest a location can be.
|
||||||
|
|
||||||
|
# Your first goal is to find the low points - the locations that are lower than
|
||||||
|
# any of its adjacent locations. Most locations have four adjacent locations
|
||||||
|
# (up, down, left, and right); locations on the edge or corner of the map have
|
||||||
|
# three or two adjacent locations, respectively. (Diagonal locations do not
|
||||||
|
# count as adjacent.)
|
||||||
|
|
||||||
|
# In the above example, there are four low points, all highlighted: two are in
|
||||||
|
# the first row (a 1 and a 0), one is in the third row (a 5), and one is in the
|
||||||
|
# bottom row (also a 5). All other locations on the heightmap have some lower
|
||||||
|
# adjacent location, and so are not low points.
|
||||||
|
|
||||||
|
# The risk level of a low point is 1 plus its height. In the above example, the
|
||||||
|
# risk levels of the low points are 2, 1, 6, and 6. The sum of the risk levels
|
||||||
|
# of all low points in the heightmap is therefore 15.
|
||||||
|
|
||||||
|
# Find all of the low points on your heightmap. What is the sum of the risk
|
||||||
|
# levels of all low points on your heightmap?
|
||||||
|
|
||||||
|
|
||||||
|
from collections import defaultdict
|
||||||
|
|
||||||
|
with open("files/P9.txt") as f:
|
||||||
|
heightmap = [line for line in f.read().strip().split()]
|
||||||
|
|
||||||
|
heightmap_dic = defaultdict(int)
|
||||||
|
for i, line in enumerate(heightmap):
|
||||||
|
for j, number in enumerate(line):
|
||||||
|
if number != "9":
|
||||||
|
heightmap_dic[i, j] = int(number)
|
||||||
|
|
||||||
|
|
||||||
|
def is_low(x, y, value):
|
||||||
|
for neighbor in ((x - 1, y), (x + 1, y), (x, y + 1), (x, y - 1)):
|
||||||
|
if value > heightmap_dic.get(neighbor, 9):
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
def part_1() -> None:
|
||||||
|
res = 0
|
||||||
|
for pos, value in heightmap_dic.items():
|
||||||
|
if not is_low(*pos, value):
|
||||||
|
continue
|
||||||
|
res += value + 1
|
||||||
|
print(res)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
part_1()
|
Loading…
x
Reference in New Issue
Block a user