У Вас не получается найти ошибку, потому что не выстроена структура и логика программы. Вот простой вариант решения "в лоб" с использованием минимума средств. Класс позволяет избавиться от сложного для восприятия нагромождения формул:
class Match:
@classmethod
def from_coords(cls, coords):
yield cls(coords[0:2])
yield cls(coords[2:4])
yield cls(coords[4:6])
def __init__(self, endpoints):
self.x1, self.x2 = sorted(endpoints)
def __invert__(self):
return self.x2 - self.x1
def __xor__(m1, m2):
return max(m1.x2, m2.x2) - min(m1.x1, m2.x1) - ~m1 - ~m2
def __and__(m1, m2):
return m1 ^ m2 <= 0
def solve(*coords):
m1, m2, m3 = Match.from_coords(coords)
if (m1 & m2) + (m1 & m3) + (m2 & m3) >= 2:
return 0
if ~m1 >= m2 ^ m3:
return 1
if ~m2 >= m1 ^ m3:
return 2
if ~m3 >= m1 ^ m2:
return 3
return -1
if __name__ == '__main__':
assert solve(0, 2, 4, 5, 3, 6) == 1
assert solve(1, 2, 9, 10, 12, 20) == 3
assert solve(1, 5, 0, 1, 4, 8) == 0
assert solve(1, 3, 3, 4, 5, 6) == 1
assert solve(0, 1, 3, 5, 9, 10) == -1