Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def raytrace(location1,location2):
- delta_x = location2[0] - location1[0]
- delta_y = location2[1] - location1[1]
- abs_x = abs(delta_x)
- abs_y = abs(delta_y)
- raytracing_list = []
- try:
- ratio = delta_x/delta_y
- except ZeroDivisionError:
- ratio = 0
- if abs_x >= abs_y:
- for i in range(abs_x + 1):
- xval = i
- if delta_x < 0:
- xval = -i
- if abs_y != 0:
- yval = xval/ratio
- else:
- yval = 0
- if yval == int(yval):
- raytracing_list.append((xval,int(yval)))
- elif abs_y > abs_x:
- for i in range(abs_y + 1):
- yval = i
- if delta_y < 0:
- yval = -i
- xval = ratio * yval
- if xval == int(xval):
- raytracing_list.append( (int(xval),yval) )
- return raytracing_list
- def reader():
- file = open('aoc10.txt', 'r')
- input = file.readlines()
- file.close()
- asteroid_list = []
- map_size = (len(input[0]) - 1,len(input))
- for y in range(len(input)):
- for x in range(len(input[y])):
- if input[y][x] == '#':
- asteroid_list.append( (x,y) )
- return asteroid_list,map_size
- def check_asteroid(asteroid,asteroids,map_size):
- los = []
- for target in asteroids:
- line = raytrace(asteroid,target)
- for location in line:
- position = ( asteroid[0]+location[0],asteroid[1]+location[1] )
- if position in asteroids and position != asteroid:
- if position not in los:
- los.append( position )
- break
- return los
- initial_data = reader()
- map_size = initial_data[-1]
- asteroids = initial_data[0]
- results = []
- for asteroid in asteroids:
- checker = check_asteroid(asteroid,asteroids,map_size)
- results.append(len(checker))
- results.sort()
- print(results[-1])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement