'''
Можно данный тип решать по разному, но зачем изобретать велосипед, если все до тебя придумали? Пользуйся
'''

'''
Что нужно знать?
and ----> ∧
or  ----> v
→   ----> <=  P.S. подумайте почему
=   ----> ==
≠   ----> !=
'''

#Не называйте функции как я. Это "прикол" маленького человека


''' https://inf-ege.sdamgia.ru/problem?id=11119
Следует различать задания «найдите длину отрезка» и «найдите количество целых чисел на отрезке».
Длина отрезка равна расстоянию между его граничными точками. Длину отрезка можно вычислить по формуле m−n, где m и n — правая и левая границы этого отрезка соответственно.
Длина отрезка не зависит от того, включены ли в него его границы. Заметим, однако, что если границы не включены, то должно использоваться слово «интервал», а не слово «отрезок».
Количество целых чисел на отрезке можно найти по формуле m − n + 1, где m и n — правая и левая границы этого отрезка соответственно, причем они входят в отрезок.
'''

print('>>>>>>')
#К.Ю.Поляков 376
'''
На числовой прямой даны два отрезка: P=[4,15] и Q=[12,20]. 
Укажите наименьшую возможную длину такого отрезка A, что формула
((x ∈ P) ∧ (x ∈ Q)) → (x ∈ A)
тождественно истинна, то есть принимает значение 1 при любом значении переменной х. 
'''

p = [i/10 for i in range(4*10, 15*10+1)] #делаем массив из дробных массив для точности вычислений интервалов, промежутков....
q = [i/ 10 for i in range(12*10+1, 20*10+1)] # P.S. так надо(((((((

def function_100_ballov(x, a):
    return (( x in p) and ( x in q)) <= (x in a)

a = set() # как и в множестве. Для минимального- минимальный
for x in [i/ 10 for i in range(1, 10000)]:
    if not function_100_ballov(x, a):
        a.add(x)
print(sorted(a)) # 12.1 => число 12 не берется, т.к. находится СЛЕВА, это простая информатика
#Включается 13, 14, 15. В ответ длину- 3


print('>>>>>>')
# Решу ЕГЭ 34547
'''
На числовой прямой даны два отрезка: P = [8, 39] и Q = [23, 58].
Какова наименьшая возможная длина интервала A, при которой выражение
((x ∈ P) ∨ (x ∈ А)) → ((x ∈ Q) ∨ (x ∈ А))

тождественно истинно, то есть принимает значение 1 при любом значении переменной х.
Ответ: 15.
'''

P = [i/10 for i in range(80, 390+1)]
Q = [i/10 for i in range(230, 580+1)]

def wtf(x, a):
    return (( x in P ) or (x in A)) <= ((x in Q) or (x in A))

A = set()
for x in [i/10 for i in range(1, 1000)]:
    if not wtf(x, a):
        A.add(x)
print(sorted(A)) # 22.9 включается, т.к. находится СПРАВА. Т.Е. 23 - 8 = 15 длина



print('>>>>>>')
#К.Ю.Поляков 362
Pi = [i/10 for i in range(20, 100+1)]
QU = [i/10 for i in range(60, 140+1)]

def python(x, a):
    return (( x in a) <= (x in Pi)) or (x in QU)

AAAA = set([i/10 for i in range(1, 10000)])

for x in [i/10 for i in range(1, 10000)]:
    if not python(x, AAAA):
        AAAA.remove(x)
print(sorted(AAAA)) #14.0 - 2.0, т.е. длина = 12

'''
Внимательно читайте, что спрашивают. При решении может быть обрыв, например: 11.9, 12.0, 14.1, 14.2...
В данном случае это два РАЗНЫХ отрезка!
Длина: конец-начало
Количество: конец-начало+1
'''
