Codegolf - Это Четырехугольник По Касательной?

  • Автор темы Siponya
  • Обновлено
  • 22, Oct 2024
  • #1

Связанный: Является ли этот четырехугольник вписанным в цикл?

Фон

А касательный четырехугольник четырехугольник, в котором есть вписанная окружность:

codegolf - Это четырехугольник по касательной?

Примеры включают любой квадрат, ромб или форму воздушного змея. Прямоугольники или параллелограммы в целом не являются касательными.

Задача

Учитывая четыре вершины четырехугольника (как декартовы координаты), определите, является ли он касательным.

Ввод и вывод

Для ввода допускается использовать любой формат, однозначно задающий координаты четырех вершин (восемь действительных чисел или чисел с плавающей запятой). Вы можете предположить следующее на входе:

  • Точки задают простой выпуклый четырехугольник, т.е. все внутренние углы строго меньше 180 градусов, а ребра сходятся только в вершинах.
  • Точки указываются в порядке против часовой стрелки (или наоборот, если хотите).

Для вывода вы можете использовать одно из следующих:

  • Значения истинности/ложности, определенные выбранным вами языком (допускается их замена), или
  • Два последовательных значения для true/false соответственно.

Допустимо, если ваш код выдает неверный результат из-за неточностей с плавающей запятой.

Тестовые случаи

Тангенциальный

 
 (0, 0), (0, 1), (2, 1), (2, 0)  # rectangle
(0, 0), (1, 1), (3, 1), (2, 0)  # parallelogram
 

Не тангенциально

(0, 0), (0, 1), (1, 1), (1, 0) # unit square (-2, 0), (0, 1), (2, 0), (0, -1) # rhombus (1, -2), (-2, -1), (-1, 2), (4, 2) # kite (0, 0), (50, 120), (50, 0), (32, -24) # all four sides different

Критерий подсчета очков и победы

Применяются стандартные правила. Выигрывает самый короткий код в байтах.

#код-гольф #код-гольф #математика #задача принятия решения #геометрия

Siponya


Рег
30 Aug, 2012

Тем
65

Постов
175

Баллов
520
  • 26, Oct 2024
  • #2

МАТЛ, 11 10 байт

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 ĆüαnOtιOË
 

Входные данные — вектор из четырех комплексных чисел. Выход: 0=={1,-1,1,-1}.Norm/@(#-RotateLeft@#)& (which is falsy) if tangential, or nonzero (which is truthy) if not tangential.

Попробуйте онлайн! Или проверить все тестовые случаи.

Объяснение

Код вычисляет разницу между суммами длин противоположных сторон. Эта разница равна нулю тогда и только тогда, когда четырехугольник является касательным.

False ||answer||

Питон 3, 47 байт

True

Попробуйте онлайн!

Возьмите комплексное число. Выходы поменялись местами Правда/Ложь. Тестовые случаи из Нудл9.


48 байт

Head@Insphere@Polygon@#&

Попробуйте онлайн!

 

Lss2312


Рег
12 May, 2006

Тем
84

Постов
192

Баллов
632
  • 26, Oct 2024
  • #3

Питон 3, 89 \$\cdots\$ 59 55 байт

Insphere

Попробуйте онлайн!

Передается список вершин в виде комплексных чисел. Длины сторон \$(a, b, c, d)\$ вычисляются и используют \$a+c=b+d\$ для касательного четырехугольника. Возвращает ложное значение (0) для тангенциального значения или истинное значение (ненулевое) в противном случае.

 

DiLLeR


Рег
03 Oct, 2004

Тем
88

Постов
223

Баллов
693
  • 26, Oct 2024
  • #4

Желе, 9 8 байт

Sphere

Попробуйте онлайн!

Объяснение

=/+/⍉2 2⍴|2-/5⍴⎕ ⎕ take 4 complex numbers as evaluated input 5⍴ reshape to 5 2-/ find the difference between each pair of numbers | absolute value 2 2⍴ reshape to 2x2 matrix ⍉ transpose +/ sum the rows =/ are they both equal?

Монадическая ссылка, принимающая список комплексных координат и возвращающая 1 в случае касательной и 0 в случае отсутствия.

На основе Ответ @LuisMendo на MATL так что обязательно проголосуйте за это!

Спасибо @JonathanAllan за сохранение байта!

 

Dan1983


Рег
22 Dec, 2011

Тем
73

Постов
222

Баллов
617
  • 26, Oct 2024
  • #5

JavaScript (ES6), 74 байта

Принимает входные данные в виде списка пар координат. Возвращает \$0\$ (ложь) для тангенциального или ненулевое значение (истина) для нетангенциального.

=/+/⍉2 2⍴|2-/5⍴⎕

Попробуйте онлайн!

 

Ccod


Рег
23 Oct, 2007

Тем
82

Постов
217

Баллов
657
  • 26, Oct 2024
  • #6

APL (Диалог Юникод), 17 11 байтыСБКС

-6 байт благодаря барботер

выводит 1, если тангенциально, 0, если нет

0=-/|2-/5⍴⎕ ⎕ take 4 complex numbers as evaluated input 5⍴ reshape to 5 2-/ difference between each pair of numbers | absolute value -/ alternating sum 0= the quadrilateral is tangential if the final result is 0

Попробуйте онлайн!

Объяснение:

0=-/|2-/5⍴⎕

Предыдущий ответ

a=>(g=_=>Math.hypot(([x,y]=a[i],[X,Y]=a[++i&3],x-X),y-Y))(i=0)-g()+g()-g()

Попробуйте онлайн!

Объяснение:

5ị€ | Modular index 1,2,3,4,5 into list ạƝ | Absolute difference of neighbouring pairs Œœ | Split into odd and even indices § | Sum of inner lists E | Equal ||answer||

Язык Wolfram (Математика), 24 байта

Возврат ṁ5ạƝŒœ§E if the quadrilateral is tangential, lambda l:sum((-1)**i*abs(l[i-1]-l[i])for i in range(4)) если это не так.

lambda a,b,c,d:A(a-b)+A(c-d)-A(b-c)-A(d-a) A=abs

Попробуйте онлайн!


Язык Wolfram (Математика), 38 байт

Возврат f=lambda l,i=3:i+1and abs(l[i]-l[i-1])-f(l,i-1) if the quadrilateral is tangential, 5: % Range [1 2 3 4 5] ) % Implicit input: complex vector of length 4. Index into it modularly. % This repeats the first vertex after the last d % Consecutive differences | % Absolute value, element-wise 2e % Reshape as a 2-column matrix, in column-major order ! % Transpose s % Sum of each column. Gives a vector of length 2 d % Consecutive difference если это не так.

0

Попробуйте онлайн!

 

Arina1995


Рег
05 Apr, 2011

Тем
76

Постов
186

Баллов
606
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно