feat(users/Profpatsch): add advent of code 2020 day 1 2 3
Change-Id: I99d2882ac9ef5ede85032132f6727e7bad8f24eb Reviewed-on: https://cl.tvl.fyi/c/depot/+/2564 Tested-by: BuildkiteCI Reviewed-by: Profpatsch <mail@profpatsch.de>
This commit is contained in:
parent
f3d00b84bb
commit
ace8c656be
3 changed files with 165 additions and 0 deletions
66
users/Profpatsch/advent-of-code/2020/03/main.py
Normal file
66
users/Profpatsch/advent-of-code/2020/03/main.py
Normal file
|
@ -0,0 +1,66 @@
|
|||
import itertools
|
||||
import math
|
||||
|
||||
def tree_line(init):
|
||||
return {
|
||||
"init-len": len(init),
|
||||
"known": '',
|
||||
"rest": itertools.repeat(init)
|
||||
}
|
||||
|
||||
def tree_line_at(pos, tree_line):
|
||||
needed = (pos + 1) - len(tree_line["known"])
|
||||
# internally advance the tree line to the position requested
|
||||
if needed > 0:
|
||||
tree_line["known"] = tree_line["known"] \
|
||||
+ ''.join(
|
||||
itertools.islice(
|
||||
tree_line["rest"],
|
||||
1+math.floor(needed / tree_line["init-len"])))
|
||||
# print(tree_line)
|
||||
return tree_line["known"][pos] == '#'
|
||||
|
||||
def tree_at(linepos, pos, trees):
|
||||
return tree_line_at(pos, trees[linepos])
|
||||
|
||||
def slope_positions(trees, right, down):
|
||||
line = 0
|
||||
pos = 0
|
||||
while line < len(trees):
|
||||
yield (line, pos)
|
||||
line = line + down
|
||||
pos = pos + right
|
||||
|
||||
trees = []
|
||||
with open("./input", 'r') as f:
|
||||
for line in f:
|
||||
line = line.rstrip()
|
||||
trees.append(tree_line(line))
|
||||
|
||||
# print(list(itertools.islice(trees[0], 5)))
|
||||
# print(list(map(
|
||||
# lambda x: tree_at(0, x, trees),
|
||||
# range(100)
|
||||
# )))
|
||||
# print(list(slope_positions(trees, right=3, down=1)))
|
||||
|
||||
def count_slope_positions(trees, slope):
|
||||
count = 0
|
||||
for (line, pos) in slope:
|
||||
if tree_at(line, pos, trees):
|
||||
count = count + 1
|
||||
return count
|
||||
|
||||
print(
|
||||
count_slope_positions(trees, slope_positions(trees, right=1, down=1))
|
||||
*
|
||||
count_slope_positions(trees, slope_positions(trees, right=3, down=1))
|
||||
*
|
||||
count_slope_positions(trees, slope_positions(trees, right=5, down=1))
|
||||
*
|
||||
count_slope_positions(trees, slope_positions(trees, right=7, down=1))
|
||||
*
|
||||
count_slope_positions(trees, slope_positions(trees, right=1, down=2))
|
||||
)
|
||||
|
||||
# I realized I could have just used a modulo instead …
|
Loading…
Add table
Add a link
Reference in a new issue