Ctrl K

Противоречивые отношения

Сложная
Каждое имя обозначает неизвестное положительное число. Даны факты об их отношениях: pairs[i] = [a, b] и ratios[i] означают, что a / b = ratios[i]. Верните True, если факты противоречат друг другу, то есть нельзя подобрать числа для всех имён так, чтобы выполнялись все факты сразу, и False иначе. Два числа считаются равными, если они отличаются меньше чем на 10⁻⁵. Тесты не рассчитаны на тонкости точности: обычного float достаточно.
Пример 1
pairs=[['tea', 'cup'], ['cup', 'jug'], ['tea', 'jug']], ratios=[0.5, 4, 2] → False

Из первых двух фактов tea / jug = 0.5 · 4 = 2, что совпадает с третьим. Например, tea = 2, cup = 4, jug = 1 — противоречия нет.

Пример 2
pairs=[['x', 'y'], ['y', 'z'], ['x', 'z']], ratios=[3, 2, 5] → True

Первые два факта дают x / z = 6, а третий утверждает, что x / z = 5. Это противоречие.

Пример 3
pairs=[['ab', 'ab']], ratios=[1.5] → True
Ограничения
  • 1 ≤ len(pairs) = len(ratios) ≤ 100
  • Каждое имя — от 1 до 5 строчных латинских букв
  • 0 < ratios[i] ≤ 10, не больше четырёх знаков после запятой
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиКого вылечить первым СложнаяКого отключить от сети СложнаяДонести новость до всех СложнаяЦепочки отношений СредняяОткрытые комнаты от холла Средняя
загружаем Python…
Вход
pairs=[['tea', 'cup'], ['cup', 'jug'], ['tea', 'jug']], ratios=[0.5, 4, 2]
Ожидается
False

«Запустить» — первые 3 теста у тебя в браузере, «Отправить» — все 73 теста на сервере, включая скрытые.