Codegolf - Нахождение Центральной Точки Между Двумя Точками На Плоскости

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

Испытание:

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

Пример:

 (0,0), (3,3) -> (1.5,1.5)

(-1,-1), (1,1) -> (0,0)

(-7,3), (2,-2) -> (-2.5,0.5)

(3, 1), (-5,9) -> (-1,5)
 

Правила:

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

Выигрывает самое короткое решение в байтах.

#код-гольф #математика #геометрия

Rcsioburble


Рег
14 Mar, 2014

Тем
89

Постов
180

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

Желе, 7 2 байты

-5 байт (ха-ха, да я идиот) спасибо FryAmTheEggman!

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 (a->b->(a+b)/2)([1,2])([3,4]) 

Принимает два списка каждый длиной d и возвращает один список длины d, где d — размеры декартова пространства (вопрос задан для двух измерений, но должен работать для любого d).

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

Как?

a->b->(a+b)/2 ||answer||

Математика, 4 байта

lambda a:sum(a)/2

Работает со списками векторов: например, lambda a,b:(a+b)/2 returns f . (Если входные данные состоят из чисел с плавающей запятой, то же самое произойдет и с выходными данными.)

 

Ronariks


Рег
28 Oct, 2019

Тем
59

Постов
180

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

Хаскелл, 22 19 байт

(defun f(a b)(mapcar(lambda(c d)(/(+ c d)2))a b))

Можно вызвать с помощью pryr::f((a+b)/2) where function(a,b)((a+b)/2) является ли какой-либо тип производным a=>b=>a.map((c,i)=>(c+b[i])/2) . Works in arbitrary dimensions.

 

Dimsa87


Рег
08 Apr, 2016

Тем
75

Постов
199

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

ТИ-БЕЙСИК, 8 байт

(x->x/2)∘(+)

Принимает входные данные из списка 1 и списка 2. Работает для всех измерений.

 

Dmitrykharkov


Рег
13 Apr, 2020

Тем
77

Постов
196

Баллов
601
  • 26, Oct 2024
  • #7

Р, 22 байта

Как безымянная функция, принимающая в качестве параметров два вектора. Просто возвращает среднее значение входных векторов так же, как и множество ответов.

a

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

И 16 байт с использованием библиотеки pryr

(zipWith$((/2).).(+)) (p1::[a]) (p2::[a]) ||answer||

Common Lisp, 70 54 49 байт

Спасибо @Julian Wolf за помощь в экономии кучу байтов!

zipWith$((/2).).(+)

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

 

SmertClank67


Рег
17 Feb, 2012

Тем
66

Постов
205

Баллов
575
  • 26, Oct 2024
  • #8

Math.JS, 14 байт

lambda*x:[sum(a)/2for a in zip(*x)]

Создает функцию {-5/2, 1/2} which takes 2 One Dimensional Matricies as input.

Как и ожидалось, это просто добавляет два, а затем уменьшает результат вдвое.

Попробуйте!

 

Grv1


Рег
22 Aug, 2006

Тем
67

Постов
209

Баллов
604
  • 26, Oct 2024
  • #9

Питон + NumPy, 18 байт

Mean[{{-7, 3}, {2, -2}}]

Работает в двух измерениях для точек, введенных как мнимые числа, или (поскольку OP указывает, что входные данные должны приниматься как последовательности) в произвольных измерениях для точек, введенных как массивы NumPy.

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

 

Eagleowl


Рег
16 Apr, 2006

Тем
78

Постов
216

Баллов
616
  • 26, Oct 2024
  • #10

Python + NumPy, 17 байт

Mean

Немного менее скучная версия другого ответа на Python. Принимает args как 1 массив, содержащий обе пары.

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

 

Lindas1


Рег
14 Mar, 2011

Тем
82

Постов
181

Баллов
641
  • 26, Oct 2024
  • #11

Юля, 13 байт

+H - Main link: a, b (lists of coordinates) + - add (vectorises across the dimensions) H - halve (vectorises across the result)

Вызов с синтаксисом каррирования, т.е. +H .

 

Mirgot


Рег
28 Jul, 2008

Тем
71

Постов
180

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

Интересно