Как сделать задачу?
Напишите функцию interval_intersect(a, b, c, d), которая принимает четыре параметра и возвращает True, если отрезки [a, b] и [c, d] пересекаются, и False иначе. Вы можете предполагать, что a <= b, c <= d
Замечание: вернуть необходимо логические константы True или False, а не строки "True" или "False"
Sample Input: 1 10 5 9
Sample Output: True
def interval_intersect(a, b, c, d):
xdiff = (line1[0][0] - line1[1][0], line2[0][0] - line2[1][0])
ydiff = (line1[0][1] - line1[1][1], line2[0][1] - line2[1][1])
def interval_intersect(a, b, c, d):
return a[0] * b[1] - a[1] * b[0]
div = det(xdiff, ydiff)
if div == 0:
raise Exception('lines do not intersect')
d = (det(*line1), det(*line2))
x = det(d, xdiff) / div
y = det(d, ydiff) / div
return x, y
print(line_intersection((A, B), (C, D)))
Ответы (4 шт):
def interval_intersect(a, b, c, d):
return bool(set(range(a, b + 1)) & set(range(c, d + 1)))
Объяснение:
set(range(a, b + 1)) и set(range(c, d + 1)) создают множества с элементами от a до b и от c до d включительно.
(То есть для входных данных 1, 3, 2, 4 это будет {1, 2, 3} и {2, 3, 4})
В range ко второму аргументу прибавляем единицу, так как в range не входит значение второго аргумента, а только число перед ним.
Оператор & возвращает пересечение множеств, то есть элементы, находящиеся в обоих множествах одновременно.
Так как нам надо, чтобы функция возвращала True или False, то добавляем bool().
Данная функция вернет True во всех случаях, когда пересечением не является пустое множество - что нам и надо.
def foo(a, b, c, d):
pos0, pos1 = [a, b], [c, d]
pos0.sort()
pos1.sort()
n0 = ((pos0[0] < pos1[0] < pos0[1] or pos0[0] < pos1[1] < pos0[1]))
n1 = ((pos1[0] < pos0[0] < pos1[1] or pos1[0] < pos0[1] < pos1[1]))
return n0 or n1
def interval_intersect(a, b, c, d):
return (a <= c <= b <= d) | (c <= a <= d <= b) | (a <= c <= d <= b) | (c <= a <= b <= d)
поскольку Вы можете предполагать, что a <= b, c <= d достаточно сравнить максимум левых концов отрезков с минимумом правых
def interval_intersect(a, b, c, d):
return max(a,c) < min(b,d)