#Challenge 1: Given a pattern of dots and hashtags, figure out how many hashtags you'd hit if you started at 0 and moved right 3 spaces for each line you descended

#Challenge 2: Given a pattern of dots and hashtags, figure out how many hashtags you'd hit if you started at 0 and moved in a variety of given patterns. return the product

with open("data/input3.txt", "r") as f:
    line_counter = 0
    positions = [0, 0, 0, 0, 0]
    hits = {0:0, 1:0, 2:0, 3:0, 4:0} #0: R1, D1 -- 1: R3, D1 -- 2: R5, D1 -- 3: R7, D1 -- 4: R1, D2
    for line in f.readlines():
        line = line.strip()
        for index, position in enumerate(positions):
            if index == 4:
                if line_counter == 0 or line_counter % 2 == 0:
                    if position < len(line):
                        obstacle = line[position]
                    else:
                        position = position - len(line)
                        obstacle = line[position]

                    if obstacle == "#":
                        hits[index] += 1

                    positions[4] = position + 1
                   
            else: 
                if position < len(line):
                    obstacle = line[position]
                else:
                    position = position - len(line)
                    obstacle = line[position]

                if obstacle == "#":
                    hits[index] += 1
            
                if index == 0:
                    positions[0] = position + 1
                elif index == 1:
                    positions[1] = position + 3
                elif index == 2:
                    positions[2] = position + 5
                elif index == 3:
                    positions[3] = position + 7

        line_counter += 1

    print(f'Part 1: The amount of trees hit in a right 3, down 1 pattern is {hits[1]}.')
    print(f'Part 2: The product of the amount of trees hit in the given variety of patterns is {hits[0] * hits[1] * hits[2] * hits[3] * hits[4]}.')


# --- Day 3: Toboggan Trajectory ---

# With the toboggan login problems resolved, you set off toward the airport. While travel by toboggan might be easy, it's certainly not safe: there's very minimal steering and the area is covered in trees. You'll need to see which angles will take you near the fewest trees.

# Due to the local geology, trees in this area only grow on exact integer coordinates in a grid. You make a map (your puzzle input) of the open squares (.) and trees (#) you can see. For example:

# ..##.......
# #...#...#..
# .#....#..#.
# ..#.#...#.#
# .#...##..#.
# ..#.##.....
# .#.#.#....#
# .#........#
# #.##...#...
# #...##....#
# .#..#...#.#
# These aren't the only trees, though; due to something you read about once involving arboreal genetics and biome stability, the same pattern repeats to the right many times:

# ..##.........##.........##.........##.........##.........##.......  --->
# #...#...#..#...#...#..#...#...#..#...#...#..#...#...#..#...#...#..
# .#....#..#..#....#..#..#....#..#..#....#..#..#....#..#..#....#..#.
# ..#.#...#.#..#.#...#.#..#.#...#.#..#.#...#.#..#.#...#.#..#.#...#.#
# .#...##..#..#...##..#..#...##..#..#...##..#..#...##..#..#...##..#.
# ..#.##.......#.##.......#.##.......#.##.......#.##.......#.##.....  --->
# .#.#.#....#.#.#.#....#.#.#.#....#.#.#.#....#.#.#.#....#.#.#.#....#
# .#........#.#........#.#........#.#........#.#........#.#........#
# #.##...#...#.##...#...#.##...#...#.##...#...#.##...#...#.##...#...
# #...##....##...##....##...##....##...##....##...##....##...##....#
# .#..#...#.#.#..#...#.#.#..#...#.#.#..#...#.#.#..#...#.#.#..#...#.#  --->
# You start on the open square (.) in the top-left corner and need to reach the bottom (below the bottom-most row on your map).

# The toboggan can only follow a few specific slopes (you opted for a cheaper model that prefers rational numbers); start by counting all the trees you would encounter for the slope right 3, down 1:

# From your starting position at the top-left, check the position that is right 3 and down 1. Then, check the position that is right 3 and down 1 from there, and so on until you go past the bottom of the map.

# The locations you'd check in the above example are marked here with O where there was an open square and X where there was a tree:

# ..##.........##.........##.........##.........##.........##.......  --->
# #..O#...#..#...#...#..#...#...#..#...#...#..#...#...#..#...#...#..
# .#....X..#..#....#..#..#....#..#..#....#..#..#....#..#..#....#..#.
# ..#.#...#O#..#.#...#.#..#.#...#.#..#.#...#.#..#.#...#.#..#.#...#.#
# .#...##..#..X...##..#..#...##..#..#...##..#..#...##..#..#...##..#.
# ..#.##.......#.X#.......#.##.......#.##.......#.##.......#.##.....  --->
# .#.#.#....#.#.#.#.O..#.#.#.#....#.#.#.#....#.#.#.#....#.#.#.#....#
# .#........#.#........X.#........#.#........#.#........#.#........#
# #.##...#...#.##...#...#.X#...#...#.##...#...#.##...#...#.##...#...
# #...##....##...##....##...#X....##...##....##...##....##...##....#
# .#..#...#.#.#..#...#.#.#..#...X.#.#..#...#.#.#..#...#.#.#..#...#.#  --->
# In this example, traversing the map using this slope would cause you to encounter 7 trees.

# Starting at the top-left corner of your map and following a slope of right 3 and down 1, how many trees would you encounter?

# Your puzzle answer was 247.

# --- Part Two ---

# Time to check the rest of the slopes - you need to minimize the probability of a sudden arboreal stop, after all.

# Determine the number of trees you would encounter if, for each of the following slopes, you start at the top-left corner and traverse the map all the way to the bottom:

# Right 1, down 1.
# Right 3, down 1. (This is the slope you already checked.)
# Right 5, down 1.
# Right 7, down 1.
# Right 1, down 2.
# In the above example, these slopes would find 2, 7, 3, 4, and 2 tree(s) respectively; multiplied together, these produce the answer 336.

# What do you get if you multiply together the number of trees encountered on each of the listed slopes?

# Your puzzle answer was 2983070376.