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