@dmitrylogvinov

Не могу решить задачу на Python?

Вдоль прямой выложены три спички. Необходимо переложить одну из них так, чтобы при поджигании любой спички сгорали все три. Для того чтобы огонь переходил с одной спички на другую, необходимо чтобы эти спички соприкасались (хотя бы концами).
Требуется написать программу, определяющую, какую из трех спичек необходимо переместить.

Формат ввода
Вводятся шесть целых чисел : l₁,r₁,l₂,r₂,l₃,r₃ –– координаты первой, второй и третьей спичек соответственно (0 ≤ lᵢ < rᵢ ≤ 100). Каждая спичка описывается координатами левого и правого концов по горизонтальной оси OX.
Формат вывода
Выведите номер искомой спички. Если возможных ответов несколько, то выведите наименьший из них. В случае, когда нет необходимости перемещать какую-либо спичку, выведите 0. Если же требуемого результата достигнуть невозможно, то выведите -1.

Примеры
Тест 1
Входные данные:
0
2
4
5
3
6
Вывод программы:
1

Тест 2
Входные данные:
1
2
9
10
12
20
Вывод программы:
3

Тест 3
Входные данные:
1
5
0
1
4
8
Вывод программы:
0

Проверка выдаёт ошибку, но я не могу ее найти.
l1 = int(input())
r1 = int(input())
l2 = int(input())
r2 = int(input())
l3 = int(input())
r3 = int(input())

if (l1 >= 0) and (l1 < r1) and (r1 <= 100) and \
        (l2 >= 0) and (l2 < r2) and (r2 <= 100) and \
        (l3 >= 0) and (l3 < r3) and (r3 <= 100):
    if ((l2 - r1) <= 1) and ((l3-r2) > 1) and (l1 < l2) and \
            (l2 < r3) and (l1 < r3):
        print(3)
    elif ((l2-r1) > 1) and ((l3-r2) > 1) and (l2-r1) <= (r3-l3):
        print(3)
    elif ((l2-r1) > 1) and ((l3-r2) <= 1):
        print(1)
    elif ((l2-r1) <= 1) and (((l3-r2) <= 1) or ((l3-r1) <= 1)):
        print(0)
    else:
        print(-1)
else:
    print(-1)
  • Вопрос задан
  • 4583 просмотра
Решения вопроса 1
adugin
@adugin Куратор тега Python
У Вас не получается найти ошибку, потому что не выстроена структура и логика программы. Вот простой вариант решения "в лоб" с использованием минимума средств. Класс позволяет избавиться от сложного для восприятия нагромождения формул:
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
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы