day 8, easy
This commit is contained in:
		
							
								
								
									
										49
									
								
								d08/run.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								d08/run.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,49 @@
 | 
			
		||||
import sys, os
 | 
			
		||||
from collections import defaultdict as dd
 | 
			
		||||
from itertools import combinations as comb
 | 
			
		||||
 | 
			
		||||
def grid_geom(G):
 | 
			
		||||
    H = len(G)
 | 
			
		||||
    W = len(G[0])
 | 
			
		||||
    return W, H
 | 
			
		||||
 | 
			
		||||
def in_grid(G, x, y) -> bool:
 | 
			
		||||
    W, H = grid_geom(G)
 | 
			
		||||
    return x>=0 and x<W and y>=0 and y<H
 | 
			
		||||
 | 
			
		||||
def get_in_grid(G, x, y):
 | 
			
		||||
    if in_grid(G, x,y):
 | 
			
		||||
        return G[y][x]
 | 
			
		||||
 | 
			
		||||
R = list(range(50)) if len(sys.argv)>1 and sys.argv[1]=="2" else [1]
 | 
			
		||||
 | 
			
		||||
L = sys.stdin.read().strip().split("\n")
 | 
			
		||||
G = [list(l) for l in L]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# dico of position
 | 
			
		||||
P = dd(list)
 | 
			
		||||
W, H = grid_geom(G)
 | 
			
		||||
for y in range(H):  # rows
 | 
			
		||||
    for x in range(W):  # cols
 | 
			
		||||
        v = get_in_grid(G, x, y)
 | 
			
		||||
        if v != '.':
 | 
			
		||||
            P[v].append((x, y))
 | 
			
		||||
 | 
			
		||||
A = set()  # antinodes
 | 
			
		||||
for k,v in P.items():
 | 
			
		||||
    for a,b in comb(v,2):
 | 
			
		||||
        x1, y1 = a
 | 
			
		||||
        x2, y2 = b
 | 
			
		||||
        dx = x2 - x1
 | 
			
		||||
        dy = y2 - y1
 | 
			
		||||
        for i in R:
 | 
			
		||||
            x3 = x1 - i*dx
 | 
			
		||||
            y3 = y1 - i*dy
 | 
			
		||||
            x4 = x2 + i*dx
 | 
			
		||||
            y4 = y2 + i*dy
 | 
			
		||||
            if in_grid(G, x3, y3):
 | 
			
		||||
                A.add((x3,y3))
 | 
			
		||||
            if in_grid(G, x4, y4):
 | 
			
		||||
                A.add((x4,y4))
 | 
			
		||||
print(len(A))
 | 
			
		||||
		Reference in New Issue
	
	Block a user