day 10, part 1 ok, part 2 with help, but nice drawing
This commit is contained in:
		
							
								
								
									
										59
									
								
								d10/run.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								d10/run.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,59 @@
 | 
			
		||||
import sys
 | 
			
		||||
 | 
			
		||||
# parse
 | 
			
		||||
I = sys.stdin.read().splitlines()
 | 
			
		||||
G = [list(l) for l in I]
 | 
			
		||||
W = len(G[0])
 | 
			
		||||
H = len(G)
 | 
			
		||||
 | 
			
		||||
# look for S
 | 
			
		||||
S = None
 | 
			
		||||
for y in range(H):
 | 
			
		||||
    if (x := I[y].find("S")) > -1:
 | 
			
		||||
        S = (x,y)
 | 
			
		||||
        break
 | 
			
		||||
 | 
			
		||||
# encode moves
 | 
			
		||||
D = {
 | 
			
		||||
    'u': {'|': ( 0,-1,'u'), 'F': ( 1, 0,'r'), '7': (-1, 0,'l')},
 | 
			
		||||
    'r': {'-': ( 1, 0,'r'), 'J': ( 0,-1,'u'), '7': ( 0, 1,'d')},
 | 
			
		||||
    'd': {'|': ( 0, 1,'d'), 'L': ( 1, 0,'r'), 'J': (-1, 0,'l')},
 | 
			
		||||
    'l': {'-': (-1, 0,'l'), 'L': ( 0,-1,'u'), 'F': ( 0, 1,'d')},
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# part 1
 | 
			
		||||
poly = [S]  # vertices of the polygone
 | 
			
		||||
x0, y0 = S
 | 
			
		||||
P = (x0+1, y0, 'r')  # start at S and go right
 | 
			
		||||
for _ in range(100_000):
 | 
			
		||||
    x, y, d = P
 | 
			
		||||
    poly.append((x,y))
 | 
			
		||||
    z = G[y][x]
 | 
			
		||||
    if z == 'S':
 | 
			
		||||
        break
 | 
			
		||||
    dx,dy,nd = D[d].get(z)
 | 
			
		||||
    P = (x+dx,y+dy,nd)
 | 
			
		||||
print(len(poly)//2)
 | 
			
		||||
 | 
			
		||||
# part 2
 | 
			
		||||
from matplotlib.path import Path
 | 
			
		||||
 | 
			
		||||
pg = Path(poly)
 | 
			
		||||
 | 
			
		||||
J = [['.']*W for _ in range(H)]
 | 
			
		||||
R = 0
 | 
			
		||||
for y in range(W):
 | 
			
		||||
    for x in range(H):
 | 
			
		||||
        if (x,y) in poly:
 | 
			
		||||
            J[y][x] = G[y][x]
 | 
			
		||||
        elif pg.contains_point((x,y)):
 | 
			
		||||
            R += 1
 | 
			
		||||
            J[y][x] = "O"
 | 
			
		||||
print(R)
 | 
			
		||||
 | 
			
		||||
# plot
 | 
			
		||||
J[y0][x0] = "S"
 | 
			
		||||
T = str.maketrans("|-LJ7F", "│─└┘┐┌")
 | 
			
		||||
with open("grid.txt","wt") as f:
 | 
			
		||||
    for row in J:
 | 
			
		||||
        print("".join(row).translate(T), file=f)
 | 
			
		||||
		Reference in New Issue
	
	Block a user