Задание
Напишите функцию L (), которая принимает два аргумента Tuple координат в форме (x, y) и возвращает их соответствующую линейную функцию в форме (a, c), где a - коэффициент члена x, а c это у-перехват.
Можно предположить, что входные данные не будут линиями, перпендикулярными оси x, и что эти два входа являются отдельными точками.
счет
Это Code Golf: самая короткая программа выигрывает.
Обратите внимание: не используйте никакие математические функции, кроме основных операторов (+, -, /, *).
пример
Вот мое решение для игры в гольф на Python.
def L(Point1, Point2):
x = 0
y = 1
Gradient = (float(Point1[y]) - float(Point2[y])) / (float(Point1[x]) - float(Point2[x]))
YIntercept = Point1[y] - Gradient * Point1[x]
return (Gradient, YIntercept)
Вывод:
>>> L( (0,0) , (1,1) )
(1.0, 0.0)
>>> L( (0,0) , (2,1) )
(0.5, 0.0)
>>> L( (0,0) , (7,1) )
(0.14285714285714285, 0.0)
>>> L( (10,22.5) , (5,12.5) )
(2.0, 2.5)
L( (0,0) , (0,1) )
?L((0,0),(0,0))
?Ответы:
J - 23 символа
Довольно просто. Определяет двоичный глагол
L
для использования в качестве(x1,y1) L (x2,y2)
.Объяснение:
Примеры:
источник
GNU dc ,
3024 байтаОпределяет макрос так
L
, что (x 1 , y 1 , x 2 , y 2 ) должны быть помещены в стек в этом порядке перед вызовом, а после вызоваL
(a, c) могут быть извлечены из стека (в обратном порядке Конечно - это стек).Testcase (сохранить как «linear.dc» и запустить
dc linear.dc
):Выход:
Объяснение макроса L:
sy
поп 2, чтобыy
зарегистрироватьсяsx
поп х 2, чтобыx
зарегистрироватьсяly
pushy
регистр (у 2 )-
вычесть y 2 из y 1r
поменяйте местами (y 1 - y 2 ) и x 1 в стекеlx
нажимнойx
регистр (х 2 )-
вычесть х 2 из х 1/
разделить (y 1 - y 2 ) на (x 1 - x 2 ), чтобы получить градиентd
двойной градиентlx
нажимнойx
регистр (х 2 )*
умножить (х 2 ) на градиентly
pushy
регистр (у 2 )r
поменять местами (y 2 ) и (x 2 * градиент) в стеке-
вычесть (x 2 * градиент) из (y 2 )источник
Хаскель, 41 персонаж
Не много для гольфа здесь. Это в значительной степени то, что вы обычно пишете без пробелов.
источник
Mathematica,
5538 байтЭто было на удивление долго (эти надоедливые длинные имена функций ...)РЕДАКТИРОВАТЬ: Изменил подход для пересечения оси (черпая вдохновение из собственного ответа ОП). Оказывается, вычисление этого было не самой умной идеей.Используйте как
Благодаря Mathematica вы также можете получить общий результат:
(Этот последний пример показывает, как я изначально это реализовал.)
Только для записи
что технически правильно.
источник
ComplexInfinity
и не старый добрыйInfinity
? (Я не знаю, Mathematica)JavaScript,
6248Спасибо @Michael за игру в гольф с ES 6.
Старая версия:
Пример ввода:
Пример вывода:
Для записи:
источник
L=(a,b)=>[g=(p=a[1]-b[1])/(q=a[0]-b[0]),p-g*q]
Python3 (51)
источник
C # 105 байт
Это не просто функция, и она будет полностью скомпилирована сама по себе. Я поставил
L
вSystem
пространстве имен Замыкание с помощью, но это лучше , чтобы полностью определить и сэкономить на использовании пространства имен. Сохранены скобки. Также экономия отreturn new z[]
вreturn new[]
источник
(c*a[0])
необходимым? Разве вы не можете удалить эти скобки и сохранить 2 байта?namespace
декларацию или изменить ееSystem.Single
, чтобы это решение было действительным.Lua 5.1.4:
6664 байтаПример использования:
источник
C ++ 88 (было 106)
Улучшено: спасибо за ваши комментарии.
Golfed:
Источник
источник
typedef
?z
:u.x=(v.y-u.y)/(v.x-u.x); u.y=v.y-z.x*v.x; return u;
Apple Swift
9586Это может быть первая запись Swift на PCG.SE ??
Я не вижу, чтобы этот язык был огромным хитом для сообщества Code Golf.
источник
Golfscript: 25 байтов
Поскольку функция должна называться «L», я сохранил ее как «L.gs» локально.
Подвох, как объясняет @Dennis в этом посте , заключается в том, что нам нужно обманом заставить Golfscript использовать рациональные числа вместо целых. Так что это работает, если вы готовы принять ввод
X1 Y1 X2 Y2
в нотации golfscriptисточник
Рубин - 48 символов
Почти идентичный ответу JavaScript:
источник
Python3 -
6457 байтВы можете уменьшить его до 43, если не используете Tuple, что делают многие люди ...
источник
return(a,q[1]-a*q[0])
PHP (75 символов)
тестовое задание :
print_r(L([0,0],[7,1]));
вывод :
(спасибо @ace)
источник