Учитывая координаты центров и радиусы 2 окружностей, выведите истинное значение того, перекрывают они или нет.
вход
Входные данные могут быть получены через STDIN или эквивалентные аргументы функции, но не как переменная. Вы можете использовать их как одну переменную (список, строку и т. Д.) Или как несколько входов / аргументов в любом порядке.
На входе будет шесть поплавков. Эти числа будут до 3 знаков после запятой. Координаты могут быть положительными или отрицательными. Радиусы будут положительными.
Выход
Выход может быть через STDOUT или возврат функции.
Программа должна иметь ровно 2 разных выхода - один для значения True (кружки перекрываются) и один для False (они не перекрываются).
Контрольные примеры
(Входные данные представлены в виде списка кортежей [(x1, y1, r1), (x2, y2, r2)]
для тестовых случаев; вы можете использовать входные данные в любом формате)
Правда
[(5.86, 3.92, 1.670), (11.8, 2.98, 4.571)]
[(8.26, -2.72, 2.488), (4.59, -2.97, 1.345)]
[(9.32, -7.77, 2.8), (6.21, -8.51, 0.4)]
Ложь
[(4.59, -2.97, 1.345), (11.8, 2.98, 4.571)]
[(9.32, -7.77, 2.8), (4.59, -2.97, 1.345)]
[(5.86, 3.92, 1.670), (6.21, -8.51, 0.4)]
Это Code Golf, самый короткий ответ в байтах выигрывает.
Ответы:
Желе , 5 байт
Принимает два комплексных числа (центры) в качестве первого аргумента и два действительных числа (радиуса) в качестве второго аргумента.
Попробуйте онлайн!
Как это устроено
источник
A
ли считать результат здесь нормой вектора "центров" строки? (ÆḊ
само по себе ошибки со сложным содержанием.)A
вычисляет расстояния между центрами как норму их разностного вектора.JavaScript (ES6), 38 байт
Вводит в виде 6 различных переменных x1 , y1 , r1 , x2 , y2 , r2 .
Контрольные примеры
Показать фрагмент кода
источник
a:Double,x:Double,b:Double,y:Double,r:Double,q:Double
.Pyth, 5 байт
Формат ввода:
Попробуйте онлайн
Как это устроено
источник
MATL , 5 байтов
Формат ввода:
Попробуйте онлайн! Или проверьте все тестовые случаи .
Как это устроено
источник
5
байты (-|
вместоZP
)-r2
r2
поможет вместо , потому что тогда вам понадобятся три различия, а не 2 различия и дополнение ... Я бы лучше побежал, пока я не погрузился слишком глубоко!R , 39 байт
принимает вход
k=c(x1,x2,y1,y2)
иr=c(r1,r2)
; возвращаетсяFALSE
для касательных окружностей.Попробуйте онлайн!
27 байт:
Принимает данные в виде матрицы с центрами окружностей, заданными в виде строк и вектора радиусов.
Попробуйте онлайн!
источник
function(k,r)dist(matrix(k,2))<sum(r)
dist(matrix(scan(),2))<sum(scan())
?питон , 40 байт
Попробуйте онлайн!
Использует сложную арифметику Python для вычисления расстояния между двумя центрами. Я предполагаю, что мы не можем принимать входные точки непосредственно как комплексные числа, поэтому код выражает их как
x+y*1j
.источник
Python 3 , 45 байт
Попробуйте онлайн!
источник
05AB1E , 6 байтов
Попробуйте онлайн!
-1 байт, используя
a - b > 0
вместо(reverse) b - a < 0
источник
Python 3 , 45 байт
Попробуйте онлайн!
-8 байт благодаря Нейлу / Степ Хен
источник
APL (Дьялог) , 10 байт
Запрашивает для центров круга как список двух комплексных чисел, затем для радиусов как список двух чисел
Попробуйте онлайн!
(+/⎕)
[является] сумма радиусов>
больше чем|
величина-/⎕
разница в центрахисточник
Mathematica, 16 байтов
Входные данные:
[{x1, y1}, {x2, y2}, r1, r2]
Mathematica имеет
RegionIntersection
встроенную функцию , но только она имеет длину 18 байт ...Встроенная версия:
Занимает 2
Disk
объекта.[Disk[{x1, y1}, r1], Disk[{x2, y2}, r2]]
,источник
Haskell ,
3736 байтПопробуйте онлайн!
Спасибо @AndersKaseorg за
-1
байт!источник
(u!v)r x y s
.Желе , 12 байт
Попробуйте онлайн!
-2 байта благодаря Денису
источник
ạ/²
теми же байтами?I
вместо уменьшения на абсолютную разницу.Java (OpenJDK 8) , 38 байт
Попробуйте онлайн!
источник
Java 8,
4138 байтПопробуй это здесь.
По-видимому, Java также имеет
Math.hypot
, что на 3 байта короче.РЕДАКТИРОВАТЬ: только что понял, что этот ответ теперь точно так же, как ответ @ 8 OlivierGrégoire Java , поэтому, пожалуйста, поставьте его вместо меня, если вам нравится 38-байтовый ответ.
Старый ответ (41 байт) :
Попробуй это здесь.
источник
Pyth , 15 байт
Принимает ввод в порядке x1, x2, y1, y2, r1, r2
Тестирование!
источник
Perl 6 , 13 байт
Попробуйте онлайн!
Первые два аргумента - это радиусы в любом порядке. Третий и четвертый аргументы - это координаты центров в виде комплексных чисел в любом порядке.
источник
Такси , 1582 байта
Попробуйте онлайн!
Выходы
1
для перекрывающихся кругов.Выходы
0
для непересекающихся кругов (включая тангенциальные круги).Разгруженный / отформатированный:
источник
C #,
5041 байтСохранено 9 байтов благодаря @KevinCruijssen.
источник
(r+R)*2
вместо(r+R)+(r+R)
?+
на RHS должен был быть*
.Scala , 23 байта
Спасибо @Arnauld за его почти полиглотный ответ .
Попробуйте онлайн!
источник
PostgreSQL, 41 символ
Подготовленный оператор, принимает входные данные в виде 2 параметров в любой
circle
записи .Образец прогона:
источник
Java,
5038 байтисточник
(x,y,r,X,Y,R)->Math.hypot(x-X,y-Y)<r+R
. На самом деле, только что понял, что это точно так же, как ответ Арно в JavaScript.Машинный код x86 (с SSE2), 36 байт
Вышеупомянутая функция принимает описания двух окружностей (x- и y-координаты центральной точки и радиуса) и возвращает логическое значение, указывающее, пересекаются они или нет.
Он использует векторное соглашение о вызовах, в котором параметры передаются в регистры SIMD. В x86-32 и 64-битной Windows это
__vectorcall
соглашение о вызовах . На 64-битных Unix / Linux / Gnu это стандартное соглашение о вызовах System64 AMD64 .Возвращаемое значение остается в младшем байте
EAX
, как это стандартно для всех соглашений о вызовах x86.Этот код одинаково хорошо работает на 32-разрядных и 64-разрядных процессорах x86, если они поддерживают набор инструкций SSE2 (который будет Intel Pentium 4 и более поздних версий или AMD Athlon 64 и более поздних).
Версия AVX, все еще 36 байтов
Если вы ориентируетесь на AVX , возможно, вы захотите добавить в инструкции префикс VEX. Это не меняет количество байтов; только фактические байты, используемые для кодирования инструкций:
Преимущество инструкций AVX состоит в том, что они берут три операнда, что позволяет вам выполнять неразрушающие операции, но это не помогает нам сжать код здесь. Однако смешивание инструкций с префиксами VEX и без них может привести к неоптимальному коду, поэтому вы, как правило, хотите придерживаться всех инструкций AVX, если вы ориентируетесь на AVX, и в этом случае это даже не повредит количеству байтов.
источник
05AB1E , 10 байтов
Попробуйте онлайн!
источник
PHP , 66 байт
Попробуйте онлайн!
Запускается из командной строки, принимая входные данные в качестве 6 аргументов параметра командной строки, и печатает 1, если кружки перекрываются, иначе 0.
источник
Юлия 0.6.0 (46 байт)
источник
Clojure, 68 байт
Принимает шесть аргументов: x1, y1, r1, x2, y2, r2. Возвращает истину или ложь.
К сожалению, Clojure не имеет
pow
функции какого-то рода. Стоит много байтов.источник
На самом деле , 8 байт
Попробуйте онлайн!
Объяснение:
источник
R (+ pryr), 31 байт
Который оценивает функцию
Где
x
находятся координаты круга 1,y
есть координаты круга 2 иz
радиусы.Вычисляет расстояние между двумя центрами, используя Пифагор, и проверяет, меньше ли это расстояние, чем сумма радиусов.
Использует векторизацию R для одновременного вычисления
(x1-x2)^2
и(y1-y2)^2
. Затем они суммируются и имеют квадратные корни.источник
Go , 93 байта
Довольно простой алгоритм, как и несколько других ответов, за исключением того, что он использует встроенный
complex
тип и вызывает math / cmplx.Abs ().Принятие радиусов в качестве комплексных чисел не помогает, потому что приведение к float64 добавляет больше байтов, чем сохраняет объявление переменной (не может сделать
float64 < complex128
).Попробуйте онлайн! Включает тестовые наборы и использует основной пакет вместо библиотеки.
источник