Day 24 Part 1

 avatar
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