part 1 day 8
This commit is contained in:
parent
50b13d3b61
commit
7ea143b059
36
8/1.py
Normal file
36
8/1.py
Normal file
@ -0,0 +1,36 @@
|
||||
# Returns the rise/run
|
||||
def slope(a: (int, int), b: (int, int)) -> (int, int):
|
||||
return (b[0] - a[0], b[1] - a[1])
|
||||
|
||||
def inside(pos: (int, int), max: (int, int)) -> bool:
|
||||
return 0 <= pos[0] < max[0] and 0 <= pos[1] < max[1]
|
||||
|
||||
if __name__ == '__main__':
|
||||
with open('input.data') as file:
|
||||
grid = [line.strip() for line in file]
|
||||
|
||||
nodes = {}
|
||||
for y, row in enumerate(grid):
|
||||
for x, c in enumerate(row):
|
||||
if c == '.':
|
||||
continue
|
||||
if c in nodes:
|
||||
nodes[c].append((x,y))
|
||||
else:
|
||||
nodes[c] = [(x,y)]
|
||||
antinodes = set()
|
||||
for freq in nodes:
|
||||
print(f'Find all possible slopes given the starting positions of {freq}')
|
||||
for x,y in nodes[freq]:
|
||||
cur = (x,y)
|
||||
slopes = [slope(cur, (ox, oy)) for ox, oy in nodes[freq]]
|
||||
slopes = list(filter(lambda i: i != (0,0), slopes))
|
||||
antis = [(x + (i[0]*2), y+ (i[1]*2)) for i in slopes]
|
||||
antis = list(filter(lambda i: inside(i, (len(grid[0]), len(grid[1]))), antis))
|
||||
for a in antis:
|
||||
if a in nodes:
|
||||
print('found', a)
|
||||
antinodes.add(a)
|
||||
print(cur, '-->', slopes, 'antis ==>', antis)
|
||||
print('Total', len(antinodes))
|
||||
|
12
8/sample.data
Normal file
12
8/sample.data
Normal file
@ -0,0 +1,12 @@
|
||||
............
|
||||
........0...
|
||||
.....0......
|
||||
.......0....
|
||||
....0.......
|
||||
......A.....
|
||||
............
|
||||
............
|
||||
........A...
|
||||
.........A..
|
||||
............
|
||||
............
|
Loading…
Reference in New Issue
Block a user