A lei de Ohm nos diz que a corrente (I) em amperes que flui através de uma resistência (R) em Ohms quando uma tensão (V) é aplicada através dela é dada da seguinte maneira:
V = I / R
Da mesma forma, a potência (P) em watts dissipada por essa resistência é dada por:
P = V * I
Por rearranjo e substituição, as fórmulas podem ser derivadas para o cálculo de duas dessas quantidades quando qualquer uma das outras duas é fornecida. Essas fórmulas são resumidas da seguinte forma (observe que esta imagem usa em E
vez de V
para volts):
Dada uma entrada de duas dessas quantidades em uma sequência, produza as outras duas.
- Os números de entrada serão decimais em qualquer formato apropriado ao seu idioma. A precisão deve ser de pelo menos três casas decimais. ( Os flutuadores IEEE 754-2008 binary32 são suficientes.)
- Cada número de entrada terá o sufixo de uma unidade. Este será um de
V A W R
Voltagem, Amperagem, Potência e Resistência (ou o equivalente em minúsculas). Além disso, você pode usar emΩ
vez deR
. As unidades não terão prefixos decimais (quilo, mili-, etc.). - As duas quantidades de entrada serão fornecidas em qualquer ordem em uma sequência, separadas por um único espaço.
- As quantidades de entrada sempre serão números reais maiores que 0.
- A saída estará no mesmo formato que a entrada.
- Construções de solução de equações não são permitidas.
Exemplo de entradas
1W 1A
12V 120R
10A 10V
8R 1800W
230V 13A
1.1W 2.333V
Saídas correspondentes
1V 1R
0.1A 1.2W
1R 100W
120V 15A
2990W 17.692R
0.471A 4.948R
Deve-se notar que as soluções para esse desafio serão efetivamente inversas. Em outras palavras, se você aplicar uma solução à entrada A B
e obter saída C D
, aplicar uma solução à entrada C D
, a saída deve ser A B
novamente, embora possivelmente fora de ordem e perturbada devido ao arredondamento de FP. Portanto, as entradas e saídas de teste podem ser usadas de forma intercambiável.
fonte
Respostas:
Ruby 171 bytes
Entrada como argumento da função. Saída para stdout com espaço à direita (pode ser revisado, se necessário.)
Explicação
Todas as fórmulas podem ser expressas na forma em
b**x*d**y
que b & d são os dois valores de entrada e x & y são potências. Por razões de golfe, a expressão(b**x*d**y)**0.5
foi finalmente preferida, pois significa que xey se tornam inteiros no intervalo de -4 a 4.A tabela a seguir mostra as expressões necessárias (as entradas são assumidas classificadas em ordem alfabética) e os valores codificados para as potências. Onde x e y são os poderes dobrados, eles são codificados como
(x+4)+(y+4)*9+9
ou equivalentemente(x+4)+(y+5)*9
. Isso coloca todas as codificações na faixa ASCII imprimível. Os operadores de energia são omitidos das fórmulas por questões de brevidade.n
é um tipo de soma de verificação feita a partir dos símbolos da unidade de entrada; pode levar os valores 0,1,2,4,5,6 (3 não é usado.)Ungolfed in program program
Saída
fonte
Python 3,
329347343339326305267251249245237 bytesIsso é bastante inchado. Definitivamente, ainda há muito golfe a fazer.
Editar:
Corrigida temporariamente a saída. Por alguma razão,return' '.join(str(eval(z[m][i]))+t[i]for i in range(2))
se recusa a funcionar corretamente.Editar: descartado
eval
.Esta função agora empresta peças de resposta do nível do rio St . Mudei o
ops
dicionário, primeiro para um dicionário de expoentes modificadosexponent*2+4
parab**((p-4)/2) * d**((q-4)/2)
, de modo que cada ump
eq
fosse um número de um dígito. Por exemplo,,b*d == b**1*d**1 == b**((6-4)/2)*d**((6-4)/2)
e o resultado estaria66
no dicionário.Depois, transformei o dicionário em uma string
z
com os expoentes modificados e as unidades necessárias em uma linha e em uma ordem específica. Primeiro, o valor ASCII de cada caractere noARVW
mod 10 é5, 2, 6, 7
. Quando quaisquer dois desses valores são adicionados, eles fornecem um número único, mod 10. Assim, cada combinação de dois caracteres pode receber um número único com(ord(x[0]) + ord(y[10] + 3) % 10
, dandoAR: 0, AV: 4, AW: 5, RV: 1, RW: 2, VW: 6
(muito semelhante à soma de verificação de Lever River St). Organizar os expoentes modificados para estar nesta ordem, ou seja[AR] [RV] [RW] [blank] [AV] [AW] [VW]
, permitez
ser acessado com eficiência (em termos de bytes).Edit: Golfed a compreensão da lista em
return
. Golfed a definição dem
.Código:
Ungolfed:
fonte
Python 3,
193187bytesExperimente online
Converte a entrada do formulário
<value> <unit> <value> <unit>
em instruções de atribuição. Em seguida, useeval
em todas as fórmulas,try/except
ignorando os erros daqueles para os quais as variáveis não foram atribuídas.fonte