Описание :
Учитывая x
и y
положения двух окружностей вместе с их radii
, выведите область пересечения двух окружностей.
Вход:
Вам будет предоставлен следующий вход:
array 1 = x and y positions of circle a
array 2 = x and y positions of circle b
radius = radii of the two congruent circles
Метод ввода :
([12 , 20] , [20 , 18] , 12) ---> two array and number
([12 , 20 , 20 , 18] , 12) ---> array and a number
(12 , 20 , 20 , 18 , 12) ---> all five numbers
('12 20' , '20 18' , 12) ---> 2 strings and a number
('12 20 20 18' , 12) ---> string and a number
('12 20 20 18 12') ---> one string
Выход :
Неотрицательное целое число (без десятичной дроби), равное площади пересечения двух окружностей.
Строка, равная вышеуказанному целому числу.
Замечания :
- Выход должен быть> = 0, так как область не может быть отрицательной.
- В случае десятичного округления до ближайшего целого числа
Примеры :
([0, 0], [7, 0], 5) ---> 14
([0, 0], [0, 10], 10) ---> 122
([5, 6], [5, 6], 3) ---> 28
([-5, 0], [5, 0], 3) ---> 0
([10, 20], [-5, -15], 20) ---> 15
([-7, 13], [-25, -5], 17) ---> 132
([-12, 20], [43, -49], 23) ---> 0
Критерии победы:
Это код-гольф, поэтому выигрывает самый короткий код в байтах для каждого языка.
Предложения:
- Предоставьте ссылку TIO, чтобы ее можно было проверить.
- Предоставьте объяснение, чтобы другие могли понять ваш код
Это только предложения и не являются обязательными.
code-golf
math
array-manipulation
geometry
Мухаммед Салман
источник
источник
answer must be positive
наanswer must be >= 0
- Если окружности не пересекаются (как в примерах 4, 7, 10), тогда правильный ответ - 0, который я в последний раз проверял, не является положительным.Ответы:
Желе ,
27 25 2422 байтаПолная программа, принимающая список двух центров в виде комплексных координат и радиус, который печатает результат (в виде двоичной ссылки возвращается список длины 1).
Попробуйте онлайн!
Чтобы взять две координаты как пары, добавьте
Uḅı
к главной ссылке, как это .Как?
источник
[[x1,y1],[x2,y2]]
вместо этого, но это стоит 3 байта. (Заметим также , что-7+13j
это число :)) - то[-7+13j,-25+-5j]
соответствует примеру , что возвращается132
,[-7, 13], [-25, -5], 17
JavaScript (ES6), 72 байта
Альтернативная формула, предложенная @ceilingcat
Принимает ввод как 5 различных параметров (x0, y0, x1, y1, r) .
Попробуйте онлайн!
JavaScript (ES7),
818077 байтСохранено 3 байта благодаря @Neil
Принимает ввод как 5 различных параметров (x0, y0, x1, y1, r) .
Попробуйте онлайн!
Как?
Это основано на общей формуле из MathWorld для неконгруэнтных кругов:
где d - расстояние между двумя центрами и r и R - радиусы.
При R = r это упрощается до:
И с r '= 2r :
Примечание : если d больше 2r ,
Math.acos()
вернетсяNaN
, что приведено к 0, когда применяется сдвиг вправо. Это ожидаемый результат, потому что d> 2r означает, что пересечения вообще нет.источник
d*(r*r-d*d)**.5
экономит 3 байта.with(Math)
и перемещение определенияd
сохраняет еще 2 байта.Mathematica
66 5751 байтА
Disk[{x,y},r]
относится к области, описанной окружностью с центром в{x,y}
радиусеr
.RegionIntersection[a,b]
возвращает пересечение областейa
,b
.Area
занимает площадь.IntegerPart
округляет до ближайшего целого числа.источник
IntegerPart
наFloor
.Floor[ ]
).Wolfram Language (Mathematica) , 50 байтов
Попробуйте онлайн!
источник
Floor
. Конечно!C (gcc) ,
83 79 7166 байтПопробуйте онлайн!
источник
Haskell , 83 байта
Просто формула, правда. Тип должен быть объявлен как
Int
NaN для отображения на 0 сfloor
.Попробуйте онлайн!
источник
JavaScript (Node.js) , 69 байт
Попробуйте онлайн!
Короче не уверен, можно ли дальше играть в гольф. Любые предложения приветствуются
источник
Perl 6 , 56 байт
Попробуйте онлайн!
Принимает координаты круга как комплексные числа.
источник
Excel, 119 байт
Ввод взят как 5 отдельных переменных:
источник
Python 2 , 109 байт
Попробуйте онлайн!
Довольно просто. Получите расстояние между кругами и используйте
R=2r
в качестве заместителя в уравнении.d<R and
замыкать, если круги не перекрываются.источник
Pyth , 63 байта
Тестирование
Принимает ввод в виде тройки, состоящей из двух двойных чисел и числа.
источник
T-SQL, 122 байта
(разрыв строки только для удобства чтения).
Использует поддержку MS SQL пространственной геометрии .
В соответствии с нашими стандартами ввода-вывода , SQL может принимать входные данные из уже существующей таблицы t с
int
полем r иvarchar
полями a и b, содержащими координаты в формате(x y)
.Мое заявление анализирует координаты , как
POINT
объекты геометрии расширяется за счет радиуса с помощью функцииSTBuffer()
, затем выполнитьSTIntersection()
сопровождаемыйSTArea()
.Если вместо этого мне разрешено вводить реальные геометрические объекты в таблицу, мой код становится почти тривиальным (48 байт):
источник