2020 Day 03, unified headers for 2020
This commit is contained in:
41
2020/03/code.py
Normal file
41
2020/03/code.py
Normal file
@ -0,0 +1,41 @@
|
||||
# SPDX-License-Identifier: MIT
|
||||
# Copyright (c) 2020 Akumatic
|
||||
#
|
||||
# https://adventofcode.com/2020/day/3
|
||||
|
||||
def readFile() -> list:
|
||||
with open(f"{__file__.rstrip('code.py')}input.txt", "r") as f:
|
||||
return [line[:-1] for line in f.readlines()]
|
||||
|
||||
def count_trees(vals: list, dx: int, dy: int) -> int:
|
||||
x, y, cnt, length, mod = 0, 0, 0, len(vals) - dy, len(vals[0])
|
||||
while y < length:
|
||||
x = (x + dx) % mod
|
||||
y += dy
|
||||
if vals[y][x] == "#":
|
||||
cnt += 1
|
||||
return cnt
|
||||
|
||||
def part1(vals: list) -> int:
|
||||
return count_trees(vals, 3, 1)
|
||||
|
||||
def part2(vals: list, sol_part1: int) -> int:
|
||||
deltas = ((1, 1), (5, 1), (7, 1), (1, 2))
|
||||
prod = sol_part1
|
||||
for delta in deltas:
|
||||
prod *= count_trees(vals, delta[0], delta[1])
|
||||
return prod
|
||||
|
||||
def test():
|
||||
test_input = ["..##.......", "#...#...#..", ".#....#..#.",
|
||||
"..#.#...#.#", ".#...##..#.", "..#.##.....", ".#.#.#....#",
|
||||
".#........#", "#.##...#...", "#...##....#", ".#..#...#.#"]
|
||||
assert part1(test_input) == 7
|
||||
assert part2(test_input, 7) == 336
|
||||
|
||||
if __name__ == "__main__":
|
||||
test()
|
||||
vals = readFile()
|
||||
sol_part1 = part1(vals)
|
||||
print(f"Part 1: {sol_part1}")
|
||||
print(f"Part 2: {part2(vals, sol_part1)}")
|
Reference in New Issue
Block a user