Here is my solution to Day 3:
from typing import Tuple
with open('input.txt') as file:
    input = file.readlines()
puzzle_input = [line.strip() for line in input]
two_d_array = []
for line in puzzle_input:
    two_d_array.append([char for char in line])
horizontal_length = len(two_d_array[0])
vertical_length = len(two_d_array)
slopes = [
    {"horizontal_shifts": 1, "vertical_shifts": 1},
    {"horizontal_shifts": 3, "vertical_shifts": 1},
    {"horizontal_shifts": 5, "vertical_shifts": 1},
    {"horizontal_shifts": 7, "vertical_shifts": 1},
    {"horizontal_shifts": 1, "vertical_shifts": 2},
]
def over_three_down_one(
    current_row: int,
    current_column: int,
    horizontal_shifts: int,
    vertical_shifts: int) -> Tuple[int, int]:
    current_row += vertical_shifts
    current_column += horizontal_shifts
    if current_column > (horizontal_length - 1):
        current_column = (current_column%horizontal_length)
    return current_row, current_column
def traverse_slope(horizontal_shifts: int, vertical_shifts: int) -> int:
    current_row = 0
    current_column = 0
    tree_collisions = 0
    while current_row < vertical_length - 1:
        current_row, current_column = over_three_down_one(
            current_row,
            current_column,
            horizontal_shifts,
            vertical_shifts)
        if two_d_array[current_row][current_column] == '#':
            tree_collisions += 1
    return tree_collisions
answer = 1
for slope in slopes:
    answer *= traverse_slope(slope['horizontal_shifts'], slope['vertical_shifts'])
print(f'Answer: {answer}')
You can also view my solution on my GitHub.
Did you solve it differently?
 

 
    
Top comments (0)