Na relatividade especial , a velocidade de um objeto em movimento em relação a outro objeto que está se movendo na direção oposta é dada pela fórmula:
s = ( v + u ) / ( 1 + v * u / c ^ 2)
Nesta fórmula, e são as magnitudes das velocidades dos objetos e é a velocidade da luz (que é aproximadamente , uma aproximação suficientemente próxima para isso. desafio).
Por exemplo, se um objeto estava se movendo em v = 50,000 m/s
e outro objeto u = 60,000 m/s
, a velocidade de cada objeto em relação ao outro seria aproximadamente s = 110,000 m/s
. É o que você esperaria da relatividade galileana (onde as velocidades simplesmente acrescentam). No entanto, se v = 50,000,000 m/s
e u = 60,000,000 m/s
, a velocidade relativa seria aproximadamente 106,451,613 m/s
, o que é significativamente diferente do 110,000,000 m/s
previsto pela relatividade galileana.
O desafio
Dado dois números inteiros v
e u
tal que 0 <= v,u < c
, calcule a velocidade aditiva relativística, usando a fórmula acima, com c = 300000000
. A saída deve ser um valor decimal ou uma fração reduzida. A saída deve estar dentro 0.001
do valor real para um valor decimal ou exata para uma fração.
Casos de teste
Formato: 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)
fonte
s/velocity/Velocity of an Unladen Swallow/g
Respostas:
MATL , 9 bytes
Experimente online!
fonte
Mathematica, 17 bytes
Uma função sem nome, recebendo dois números inteiros e retornando uma fração exata.
Explicação
Isso usa dois bons truques com a sequência de argumentos
##
, o que me permite evitar referenciar os argumentos individuaisu
ev
separadamente.##
expande para uma sequência de todos os argumentos, que é uma espécie de "lista desembrulhada". Aqui está um exemplo simples:dá
O mesmo funciona em funções arbitrárias (já que
{...}
é apenas uma abreviação deList[...]
):dá
Agora também podemos entregar
##
aos operadores que primeiro os tratarão como um único operando no que diz respeito ao operador. Em seguida, o operador será expandido para sua forma completaf[...]
e somente então a sequência será expandida. Neste caso,+##
éPlus[##]
o que éPlus[u, v]
, ou seja, o numerador que queremos.No denominador, por outro lado,
##
aparece como o operador esquerdo de/
. A razão pela qual isso se multiplicau
ev
é bastante sutil./
é implementado em termos deTimes
:Então, quando
a
é##
, ele é expandido depois e acabamos comAqui,
*^
é apenas o operador do Mathematica para notação científica.fonte
Geléia, 9 bytes
Experimente online! Alternativamente, se você preferir frações, você pode executar o mesmo código com M .
Como funciona
fonte
Python3,
55 3129 bytesPython é péssimo para obter entradas conforme cada entrada precisa,
int(input())
mas aqui está a minha solução de qualquer maneira:v, u = int (entrada ()), int (entrada ()); print ((v + u) / (1 + v * u / 9e16))Graças ao @Jakube, na verdade não preciso de todo o programa, apenas da função. Conseqüentemente:
Bastante auto-explicativo,
obtenha entradas,calcule. Eu usei c ^ 2 e simplifiquei que, como 9e16 é menor que (3e8 ** 2).Python2, 42 bytes
Obrigado a @muddyfish
fonte
int(input())
e substituí-lo porinput()
, também pode soltar os colchetes na declaração de impressãolambda u,v:(v+u)/(1+v*u/9e16)
, e isso funciona tanto para Python 2 e 3.J,
1311 bytesUso
Onde
>>
está STDIN e<<
está STDOUT.fonte
Matlab, 24 bytes
Função anônima que recebe duas entradas. Nada extravagante, apenas enviado para ser completo.
fonte
CJam, 16 bytes
Ainda tenho certeza de que há bytes a serem salvos aqui
fonte
q~d]_:+\:*9e16/)/
d
a trabalhar assim, mas não posso acreditar que eu perdi o operador de incremento ....q~_:+\:*9.e16/)/
Dyalog APL , 11 bytes
A fração da soma e [o incremento das divisões de noventa quadrilhões e do produto]:
÷⍨
é "divide", como em "noventa quadrilhões divide n ", isto é, equivalente a n dividido por noventa quadrilhões.fonte
Haskell, 24 bytes
Como uma única função que pode fornecer um ponto flutuante ou um número fracionário, dependendo do contexto em que é usado ...
Exemplo de uso no REPL:
fonte
u#v
vez der u v
.Pyke, 12 bytes
Experimente aqui!
fonte
Pitão, 14 bytes
Suíte de teste.
Fórmula:
sum(input) / (1 + (product(input) / 9e16))
Bônus: clique aqui!
fonte
Javascript 24 bytes
Raspou 4 bytes graças a @LeakyNun
Bem direto
fonte
v=>u=>(v+u)/(1+v*u/9e16)
tudo bem?Julia, 22 bytes
Experimente online!
fonte
Noether , 24 bytes
Não concorrente
Experimente aqui!
Noether parece ser uma linguagem apropriada para o desafio, uma vez que Emmy Noether foi pioneira nas idéias de simetria que levam às equações de Einstein (isso,
E = mc^2
etc.)De qualquer forma, isso é basicamente uma tradução da equação fornecida para inverter a notação de polimento.
fonte
TI-BASIC, 12 bytes
Toma entrada como uma lista de
{U,V}
onAns
.fonte
PowerShell, 34 bytes
Implementação extremamente direta. Porém, não há esperança de encontrar alguém, graças aos 6
$
requeridos.fonte
Oracle SQL 11.2, 39 bytes
fonte
T-SQL, 38 bytes
Experimente online!
Implementação simples de fórmula.
fonte
ForceLang, 116 bytes
Não-competitivo, usa a funcionalidade de idioma adicionada após o lançamento do desafio.
fonte
TI-Basic, 21 bytes
fonte
E
vale 2 bytes?dc, 21 bytes
Isso pressupõe que a precisão já foi definida, por exemplo, com
20k
. Adicione 3 bytes se não puder fazer essa suposição.Uma versão mais precisa é
em 24 bytes.
Ambos são transcrições razoavelmente fiéis da fórmula, sendo o único golfe notável o uso de
9I16^*
para c².fonte
PHP,
4445 bytesFunção anônima, bem direta.
fonte
c^2
no denominador ... ou seja,9e16
equivalente.Na verdade, 12 bytes
Experimente online!
Explicação:
fonte
Java (JDK) , 24 bytes
Experimente online!
fonte
Quarto (gforth) , 39 bytes
Experimente online!
Código Explicação
fonte