Files
advent-of-code/2023/10.py
T
Samuel Enocsson 549f0c4382 Initial commit: AoC solutions 2023-2025
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-02 10:39:09 +01:00

81 lines
2.7 KiB
Python

import numpy as np
import math
# | is a vertical pipe connecting north and south.
# - is a horizontal pipe connecting east and west.
# L is a 90-degree bend connecting north and east.
# J is a 90-degree bend connecting north and west.
# 7 is a 90-degree bend connecting south and west.
# F is a 90-degree bend connecting south and east.
def main():
with open("10-input.txt", "r") as file:
arr = []
for line in file.readlines():
char_array = []
for char in line.strip():
char_array.append(char)
arr.append(char_array)
matrix = np.array(arr)
print(matrix.shape)
indices = np.nonzero(matrix == "S")
row_indices, col_indices = indices
starting_pos = (row_indices[0], col_indices[0])
current_position: tuple = starting_pos
last_position: tuple = starting_pos
steps = 0
visited = []
while True:
visited.append(current_position)
current = matrix[current_position]
next_position = find_next(current, current_position, last_position)
print(f"steps: {steps}: current {current} next {next_position}")
last_position = current_position
current_position = next_position
steps += 1
if next_position == starting_pos:
break
half = steps / 2
print(math.ceil(half))
rows, cols = zip(*visited)
new_matrix = matrix[rows, cols]
print(new_matrix.shape)
def find_next(pipe: str, position: tuple, last_position: tuple):
row_index, col_index = position
last_row_index, last_col_index = last_position
# print(pipe)
match pipe:
case "|":
if last_row_index > row_index:
return (row_index - 1, col_index)
return (row_index + 1, col_index)
case "-":
if last_col_index > col_index:
return (row_index, col_index - 1)
return (row_index, col_index + 1)
case "L":
if last_col_index > col_index:
return (row_index - 1, col_index)
return (row_index, col_index + 1)
case "J":
if last_col_index < col_index:
return (row_index - 1, col_index)
return (row_index, col_index - 1)
case "7":
if last_col_index < col_index:
return (row_index + 1, col_index)
return (row_index, col_index - 1)
case "F":
if last_row_index > row_index:
return (row_index, col_index + 1)
return (row_index + 1, col_index)
case "S":
return (row_index + 1, col_index)
if __name__ == "__main__":
main()