from math import sqrt, isclose
def collisiontime(x1,y1,z1,vx1,vy1,vz1,r1, x2,y2,z2,vx2,vy2,vz2,r2):
x2 -= x1
y2 -= y1
z2 -= z1
vx2 -= vx1
vy2 -= vy1
vz2 -= vz1
a = vx2**2 + vy2**2 + vz2**2
b = 2*x2*vx2 + 2*y2*vy2 + 2*z2*vz2
c = x2**2 + y2**2 + z2**2 - (r1+r2)**2
D = b**2-4*a*c
if D < 0:
return None
if isclose(D, 0):
return -b/2/a
return (-b - sqrt(D)) / 2 /a, (-b + sqrt(D)) / 2 /a
print(collisiontime(0, 0, 0, 2, 0, 0, 2, 25, 0, 0, -3, 0, 0, 3)) # 1=> <=2
print(collisiontime(0, 0, 0, 2, 0, 0, 2, 25, 5, 0, 1, 0, 0, 3)) # 1=> <=2 chase wuth touching
print(collisiontime(-7, 5, 0,-1, 0, 3, 3, 10, 7, -6, -2, 0, 4, 6))
print(collisiontime(10, 3, -10,-9, 3, -8,5, 2, 0, 0, -4, 3, -10, 6))
ZnJvbSBtYXRoIGltcG9ydCBzcXJ0LCBpc2Nsb3NlCgpkZWYgY29sbGlzaW9udGltZSh4MSx5MSx6MSx2eDEsdnkxLHZ6MSxyMSwgIHgyLHkyLHoyLHZ4Mix2eTIsdnoyLHIyKToKICAgIHgyIC09IHgxCiAgICB5MiAtPSB5MQogICAgejIgLT0gejEKICAgIHZ4MiAtPSB2eDEKICAgIHZ5MiAtPSB2eTEKICAgIHZ6MiAtPSB2ejEKICAgIGEgPSB2eDIqKjIgKyB2eTIqKjIgKyB2ejIqKjIKICAgIGIgPSAyKngyKnZ4MiArIDIqeTIqdnkyICsgMip6Mip2ejIKICAgIGMgPSB4MioqMiArIHkyKioyICsgejIqKjIgLSAocjErcjIpKioyCiAgICBEID0gYioqMi00KmEqYwogICAgaWYgRCA8IDA6CiAgICAgICAgcmV0dXJuIE5vbmUKICAgIGlmIGlzY2xvc2UoRCwgMCk6CiAgICAgICAgcmV0dXJuIC1iLzIvYQogICAgcmV0dXJuICgtYiAtIHNxcnQoRCkpIC8gMiAvYSwgKC1iICsgc3FydChEKSkgLyAyIC9hCgpwcmludChjb2xsaXNpb250aW1lKDAsIDAsIDAsIDIsIDAsIDAsIDIsIDI1LCAwLCAwLCAtMywgMCwgMCwgMykpICMgICAgMT0+ICAgPD0yCnByaW50KGNvbGxpc2lvbnRpbWUoMCwgMCwgMCwgMiwgMCwgMCwgMiwgMjUsIDUsIDAsIDEsIDAsIDAsIDMpKSAgIyAgICAxPT4gICA8PTIgIGNoYXNlIHd1dGggdG91Y2hpbmcKCnByaW50KGNvbGxpc2lvbnRpbWUoLTcsIDUsIDAsLTEsIDAsIDMsIDMsICAxMCwgNywgLTYsIC0yLCAwLCA0LCA2KSkKcHJpbnQoY29sbGlzaW9udGltZSgxMCwgMywgLTEwLC05LCAzLCAtOCw1LCAgMiwgMCwgMCwgLTQsIDMsIC0xMCwgNikp