2023 dec 10th
This commit is contained in:
parent
a529df7077
commit
78fcb37413
1 changed files with 101 additions and 0 deletions
101
Python/2023/10/main.py
Normal file
101
Python/2023/10/main.py
Normal file
|
|
@ -0,0 +1,101 @@
|
||||||
|
import math
|
||||||
|
|
||||||
|
input = open("input", 'r')
|
||||||
|
|
||||||
|
data = []
|
||||||
|
start = (0,0)
|
||||||
|
|
||||||
|
for i, line in enumerate(input):
|
||||||
|
line = line.rstrip()
|
||||||
|
if "S" in line:
|
||||||
|
for j in range(len(line)):
|
||||||
|
if line[j] == "S":
|
||||||
|
start = (i, j)
|
||||||
|
data.append(list(line))
|
||||||
|
|
||||||
|
# replace "S" with character based on input so I don't need a bunch of code for it. line[j] = "7"
|
||||||
|
data[start[0]][start[1]] = "7"
|
||||||
|
# data[start[0]][start[1]] = "F"
|
||||||
|
|
||||||
|
explored = [["." for _ in line] for line in data]
|
||||||
|
|
||||||
|
def north(pos):
|
||||||
|
return ((pos[0]-1, pos[1]), "s")
|
||||||
|
def south(pos):
|
||||||
|
return ((pos[0]+1, pos[1]), "n")
|
||||||
|
def east(pos):
|
||||||
|
return ((pos[0], pos[1]+1), "w")
|
||||||
|
def west(pos):
|
||||||
|
return ((pos[0], pos[1]-1), "e")
|
||||||
|
|
||||||
|
def next_tile(pos, prev_card):
|
||||||
|
tile = data[pos[0]][pos[1]]
|
||||||
|
explored[pos[0]][pos[1]] = tile
|
||||||
|
if tile == "|":
|
||||||
|
return north(pos) if prev_card == "s" else south(pos)
|
||||||
|
if tile == "L":
|
||||||
|
return north(pos) if prev_card == "e" else east(pos)
|
||||||
|
if tile == "J":
|
||||||
|
return north(pos) if prev_card == "w" else west(pos)
|
||||||
|
if tile == "F":
|
||||||
|
return south(pos) if prev_card == "e" else east(pos)
|
||||||
|
if tile == "7":
|
||||||
|
return south(pos) if prev_card == "w" else west(pos)
|
||||||
|
if tile == "-":
|
||||||
|
return east(pos) if prev_card == "w" else west(pos)
|
||||||
|
print("ERROR")
|
||||||
|
return (pos, prev_card)
|
||||||
|
|
||||||
|
forward = next_tile(start, "w")
|
||||||
|
backward = next_tile(start, "s")
|
||||||
|
|
||||||
|
iters = 1
|
||||||
|
while forward[0] != backward[0]:
|
||||||
|
forward = next_tile(*forward)
|
||||||
|
backward = next_tile(*backward)
|
||||||
|
iters += 1
|
||||||
|
|
||||||
|
print(iters)
|
||||||
|
|
||||||
|
insides = 0
|
||||||
|
|
||||||
|
# for row in explored:
|
||||||
|
# for column in row:
|
||||||
|
# print(column, end=" ")
|
||||||
|
# print()
|
||||||
|
|
||||||
|
for i, row in enumerate(explored):
|
||||||
|
pipes_crossed = 0
|
||||||
|
j = 0
|
||||||
|
while j < len(row):
|
||||||
|
start_j = j
|
||||||
|
tile = row[j]
|
||||||
|
if tile == "." and pipes_crossed % 2 == 1:
|
||||||
|
explored[i][j] = "I"
|
||||||
|
insides += 1
|
||||||
|
elif tile == "|":
|
||||||
|
pipes_crossed += 1
|
||||||
|
elif tile == "L":
|
||||||
|
j += 1
|
||||||
|
tile = row[j]
|
||||||
|
while tile == "-":
|
||||||
|
j += 1
|
||||||
|
tile = row[j]
|
||||||
|
if tile == "7":
|
||||||
|
pipes_crossed += 1
|
||||||
|
elif tile == "F":
|
||||||
|
j += 1
|
||||||
|
tile = row[j]
|
||||||
|
while tile == "-":
|
||||||
|
j += 1
|
||||||
|
tile = row[j]
|
||||||
|
if tile == "J":
|
||||||
|
pipes_crossed += 1
|
||||||
|
j += 1
|
||||||
|
|
||||||
|
# for row in explored:
|
||||||
|
# for column in row:
|
||||||
|
# print(column, end="")
|
||||||
|
# print()
|
||||||
|
|
||||||
|
print(insides)
|
||||||
Loading…
Add table
Add a link
Reference in a new issue