AdventOfCode/2023/day18/part2.py

90 lines
1.5 KiB
Python

import sys
import os
from pprint import pprint
import time
from shapely.geometry import Point
from shapely.geometry.polygon import Polygon
import shapely
import numpy as np
from matplotlib.path import Path
import sympy
#colors
from termcolor import colored
start_time = time.time()
def p(x,inside):
for idx,i in enumerate(x):
for jdx,j in enumerate(i):
#if j == '#':
# print(colored(j,'red'),end='')
#if (idx,jdx) in steps:
# print(colored(j,'blue'),end='')
if (idx,jdx) in inside:
print(colored(j,'green'),end='')
else:
print(j,end='')
print()
input_f = ''
if len(sys.argv) == 1:
input_f = 'test'
else:
input_f = sys.argv[1]
grid = []
with open(input_f) as file:
for line in file:
grid.append(line.rstrip().split())
steps = []
#size = 20
cur = (0,0)
steps.append(cur)
for i in grid:
color = i[2][2:-1]
match int(color[-1:]):
case 0:
direction = 'R'
case 1:
direction = 'D'
case 2:
direction = 'L'
case 3:
direction = 'U'
length = int(color[:-1], 16)
if direction == 'R':
cur = (cur[0],cur[1]+length)
if direction == 'D':
cur = (cur[0]+length,cur[1])
if direction == 'L':
cur = (cur[0],cur[1]-length)
if direction == 'U':
cur = (cur[0]-length,cur[1])
steps.append(cur)
polygon = Polygon(steps)
area = polygon.buffer(0.5,join_style="mitre").area
print(int(area))
print("--- %s seconds ---" % (time.time() - start_time))