Day 24 Part 1
unknown
python
a year ago
1.4 kB
9
Indexable
from fractions import Fraction as frac from numpy import sign from math import inf f=open("input.txt","r") vel,cor=[],[] for line in f: line=line.replace("\n","").replace("@",",").replace(" ","").split(",") cor.append([int(line[0]),int(line[1]),int(line[2])]) vel.append([int(line[3]),int(line[4]),int(line[5])]) f.close() def cross(a,b): m_1 = frac(vel[a][1],vel[a][0]) m_2 = frac(vel[b][1],vel[b][0]) if m_1 == m_2: if cor[a][0] == cor[b][0]: return[200000000000001,200000000000001] return [inf,inf] x_3 = frac(frac(cor[b][1],(m_2 * cor[b][0])) - frac(cor[a][1],(m_1 * cor[a][0])),m_1-m_2) x_3 = frac(cor[b][1] - m_2 * cor[b][0] - cor[a][1] + m_1 * cor[a][0],m_1-m_2) y_3 = m_1 * x_3 + cor[a][1] - m_1*cor[a][0] if x_3*sign(vel[a][0]) < sign(vel[a][0]) * cor[a][0]: return[inf,inf] if x_3*sign(vel[b][0]) < sign(vel[b][0]) * cor[b][0]: return[inf,inf] return [x_3,y_3] counter = 0 x_left,y_left = 200000000000000,200000000000000 x_right,y_right=400000000000000,400000000000000 for i in range(len(cor)): for j in range(i+1,len(cor)): punkt = cross(i,j) if punkt[0] - x_left >= 0 and punkt[0] - x_right <= 0: if punkt[1] -y_left >= 0 and punkt[1] - y_right <= 0: counter+=1 print(counter)
Editor is loading...
Leave a Comment