В специальной теории относительности скорость движущегося объекта относительно другого объекта, который движется в противоположном направлении, определяется по формуле:
s = ( v + u ) / ( 1 + v * u / c ^ 2)
В этой формуле и - величины скоростей объектов, а - скорость света (которая приблизительно равна , достаточно близкое приближение для этого вызов).
Например, если бы один объект двигался v = 50,000 m/s
, а другой объект двигался u = 60,000 m/s
, скорость каждого объекта относительно другого была бы приблизительно s = 110,000 m/s
. Это то, что вы ожидаете при галилеевой относительности (где скорости просто складываются). Однако, если v = 50,000,000 m/s
и u = 60,000,000 m/s
, относительная скорость будет приблизительно 106,451,613 m/s
, что значительно отличается от 110,000,000 m/s
предсказанного относительностью Галилея.
Соревнование
Учитывая два целых числа v
и u
такое, что 0 <= v,u < c
, вычислите релятивистскую аддитивную скорость, используя вышеупомянутую формулу, с c = 300000000
. Вывод должен быть либо десятичным значением, либо сокращенной дробью. Выходные данные должны быть в пределах 0.001
фактического значения для десятичного значения или точного значения для дроби.
Тестовые случаи
Формат: v, u -> exact fraction (float approximation)
50000, 60000 -> 3300000000000/30000001 (109999.99633333346)
50000000, 60000000 -> 3300000000/31 (106451612.90322581)
20, 30 -> 7500000000000000/150000000000001 (49.999999999999666)
0, 20051 -> 20051 (20051.0)
299999999, 299999999 -> 53999999820000000000000000/179999999400000001 (300000000.0)
20000, 2000000 -> 4545000000000/2250001 (2019999.1022226212)
2000000, 2000000 -> 90000000000/22501 (3999822.2301231055)
1, 500000 -> 90000180000000000/180000000001 (500000.9999972222)
1, 50000000 -> 90000001800000000/1800000001 (50000000.972222224)
200000000, 100000000 -> 2700000000/11 (245454545.45454547)
источник
s/velocity/Velocity of an Unladen Swallow/g
Ответы:
MATL , 9 байт
Попробуйте онлайн!
источник
Mathematica, 17 байт
Безымянная функция, принимающая два целых числа и возвращающая точную дробь.
объяснение
Здесь используются два приятных трюка с последовательностью аргументов
##
, что позволяет мне избегать ссылки на отдельные аргументыu
иv
отдельно.##
расширяется до последовательности всех аргументов, которая является своего рода «развернутым списком». Вот простой пример:дает
То же самое работает внутри произвольных функций (поскольку
{...}
это просто сокращение дляList[...]
):дает
Теперь мы также можем передать
##
операторам, которые сначала будут относиться к ним как к одному операнду. Тогда оператор будет расширен до полной формыf[...]
, и только тогда последовательность будет расширена. В этом случае+##
,Plus[##]
который естьPlus[u, v]
, то есть числитель мы хотим.В знаменателе, с другой стороны,
##
появляется как левый оператор/
. Причина, по которой это умножаетсяu
иv
является довольно тонкой./
реализуется с точки зренияTimes
:Поэтому , когда
a
есть##
, она будет расширена после этого и мы в конечном итогеЗдесь,
*^
просто оператор Mathematica для научной записи.источник
Желе, 9 байт
Попробуйте онлайн! С другой стороны , если вы предпочитаете фракции, вы можете выполнить один и тот же код с М .
Как это работает
источник
Python3,
55 3129 байтPython ужасен для получения входных данных по мере необходимости,
int(input())
но вот мое решение в любом случае:V, U = INT (вход ()), Int (вход ()); печать ((V + U) / (1 + v * и / 9e16))Благодаря @Jakube мне на самом деле не нужна вся программа, только функция. Следовательно:
Скорее самоочевидный,
получить входные данные,вычисления. Я использовал c ^ 2 и упростил это, поскольку 9e16 короче (3e8 ** 2).Python2, 42 байта
Благодаря @muddyfish
источник
int(input())
и заменить его наinput()
, вы также можете снять скобки вокруг оператора печатиlambda u,v:(v+u)/(1+v*u/9e16)
, и это работает как для Python 2, так и для 3.J,
1311 байтПрименение
Где
>>
STDIN и<<
STDOUT.источник
Matlab, 24 байта
Анонимная функция, которая принимает два входа. Ничего особенного, просто представлено для полноты.
источник
CJam, 16 байт
Я все еще уверен, что здесь можно сохранить байты
источник
q~d]_:+\:*9e16/)/
d
такой работе, но не могу поверить, что пропустил оператор приращения ...q~_:+\:*9.e16/)/
Дьялог АПЛ , 11 байт
Доля суммы и [прирост делится на девяносто квадриллионов и произведение]:
÷⍨
is «делит», как в «девяносто квадриллионов делит n », то есть эквивалентно n, деленному на девяносто квадриллионов.источник
Haskell, 24 байта
Как отдельная функция, которая может предоставлять либо число с плавающей запятой, либо дробное число, в зависимости от контекста, в котором она используется ...
Пример использования в REPL:
источник
u#v
вместоr u v
.Пайк, 12 байт
Попробуй это здесь!
источник
Pyth, 14 байт
Тестирование.
Формула:
sum(input) / (1 + (product(input) / 9e16))
Бонус: нажмите здесь!
источник
JavaScript 24 байта
Сбросил 4 байта благодаря @LeakyNun
Довольно просто
источник
v=>u=>(v+u)/(1+v*u/9e16)
быть в порядке?Юлия, 22 байта
Попробуйте онлайн!
источник
Нетер , 24 байта
Неконкурирующих
Попробуй это здесь!
Нётер кажется подходящим языком для решения этой проблемы, учитывая, что Эмми Нётер была пионером идей симметрии, которые привели к уравнениям Эйнштейна (это и
E = mc^2
т. Д.)В любом случае, это в основном перевод данного уравнения в обратную польскую запись.
источник
TI-BASIC, 12 байтов
Принимает входной сигнал в виде списка
{U,V}
наAns
.источник
PowerShell, 34 байта
Чрезвычайно простая реализация. Нет надежды на то, чтобы догнать кого-либо, хотя, благодаря 6
$
требуется.источник
Oracle SQL 11.2, 39 байт
источник
T-SQL, 38 байт
Попробуйте онлайн!
Простая реализация формулы.
источник
ForceLang, 116 байт
Неконкурентоспособен, использует языковую функциональность, добавленную после публикации заявки.
источник
TI-Basic, 21 байт
источник
E
стоит 2 байта?постоянный ток, 21 байт
Это предполагает, что точность уже установлена, например, с
20k
. Добавьте 3 байта, если вы не можете сделать это предположение.Более точная версия
на 24 байта.
Оба они являются достаточно точными транскрипциями формулы, при этом единственным заметным видом игры в гольф является использование
9I16^*
для c².источник
PHP,
4445 байтАнонимная функция, довольно простая.
источник
c^2
знаменатель ... т.е.9e16
или эквивалентный.На самом деле, 12 байтов
Попробуйте онлайн!
Объяснение:
источник
Java (JDK) , 24 байта
Попробуйте онлайн!
источник
Forth (gforth) , 39 байтов
Попробуйте онлайн!
Код Объяснение
источник