Учитывая координаты левого верхнего угла двух квадратов и длину их сторон, определите, перекрываются ли квадраты. Квадрат включает в себя верхнюю и левую линии, но не нижнюю и правую линии. То есть точка (a,b)
находится внутри квадрата с длиной стороны, k
которая начинается (x,y)
тогда и только тогда, когда x <= a < x+k
и y <= b < y+k
. Квадрат с длиной стороны 0 вырожден и не будет здесь рассматриваться, поэтому k
будет положительным.
Как обычно, применяются все стандартные правила. Ввод и вывод могут быть в любой удобной форме, при условии, что они удобочитаемы и нет предварительных вычислений. Обязательно укажите, какой формат ввода вы используете. Ваш код должен принимать шесть чисел и выводить правдиво, если квадраты перекрываются и ложно в противном случае.
Тестовые случаи
x1 y1 k1 x2 y2 k2 overlap?
1 1 1 0 1 1 false
0 0 3 1 1 1 true
1 1 1 0 0 3 true
0 0 3 2 1 2 true
0 0 2 1 1 2 true
1 1 2 0 0 2 true
0 1 2 1 0 2 true
1 0 2 0 1 2 true
2 0 2 0 2 2 false
1 0 3 0 1 1 false
0 2 3 0 0 2 false
Все входные данные будут неотрицательными целыми числами. Тем не менее, я ожидаю, что многие или большинство решений также смогут обрабатывать негативы и плавающие.
Ответы:
Python, 33 байта
Python поддерживает цепочки неравенств, даже когда они указывают противоположные направления.
Интервалы x-координаты
[x,x+k)
и[X,X+K)
перекрываются до тех пор, пока ни один из них не находится полностью справа от другого, что означает, что левая конечная точка каждого интервала находится слева от правой конечной точки другого интервала.Можно объединить в совместное неравенство
-K<X-x<k
. Запись того же для Y-координат и склейка их в-K
дает выражениеисточник
MATL,
14111054 байтаЭто решение принимает входные данные в виде двух массивов:
[x1, y1; x2, y2]
[k2; k1]
Попробуйте онлайн
Слегка измененная версия для запуска всех тестовых случаев
объяснение
источник
MATLAB,
3621 байтСоздает анонимную функцию, которая может быть оценена как
ans(a,b)
. Принимает два ввода следующего формата:[x1, y1; x2, y2]
.[k2; k1]
Все тестовые случаи здесь .
объяснение
Вот прокомментированное решение для игры в гольф
источник
JavaScript (ES6), 38 байт
Если d - a ≥ c, то второй квадрат находится справа от первого. Точно так же другие условия проверяют, что это не слева, не ниже или выше.
источник
Желе , 8 байт
Входные данные - это вложенный список [[x1, y1, k1], [x2, y2, k2]] , выходные данные - список всех увеличенных координат точек с целочисленными координатами, которые являются общими для обоих квадратов (ложно, если пусто, верно, если нет ).
Попробуйте онлайн! или проверьте все контрольные примеры .
Как это работает
источник
TI Basic, 36 байт
источник
Java, 78 байт
источник
Object
тип возвращаемого значения для -1 байтаОктава, 17 байт
То же логика , как мой MATLAB ответ выше, за исключением того, что Октав поддерживает автоматическую трансляцию размеров , поэтому мы можем заменить
[b,b]
с простоb
.Все тестовые случаи здесь
источник
SmileBASIC,
7657 байтСоздает спрайт с размером / положением первого квадрата, затем проверяет, сталкивается ли он со вторым квадратом.
источник
x86-64 Машинный код, Windows 22 байта
С ++ подпись:
Возвращает 0, если квадраты не перекрываются, и -1 (0xFFFFFFFF) в противном случае. Входами являются векторы 2 64-битных целых чисел для x, y и k (
_mm_set_epi64x(x1, x2)
и т. Д.).источник
05AB1E , 5 байтов
Порт ответа @Suever на MATL с дополнительным преобразованием в истинный / ложный результат. Формат ввода поэтому также тот же:
первый ввод как
[[x1,y1],[x2,y2]]
и второй ввод как[k2,k1]
.Попробуйте онлайн или проверьте все контрольные примеры .
Объяснение:
источник