La ley de Ohm nos dice que la corriente (I) en amperios que fluye a través de una resistencia (R) en ohmios cuando se aplica un voltaje (V) a través de ella se da de la siguiente manera:
V = I / R
Del mismo modo, la potencia (P) en vatios disipada por esa resistencia viene dada por:
P = V * I
Por reordenamiento y sustitución, se pueden derivar fórmulas para calcular dos de estas cantidades cuando se da cualquiera de los otros dos. Estas fórmulas se resumen de la siguiente manera (tenga en cuenta que esta imagen utiliza en E
lugar de V
para voltios):
Dada una entrada de cualquiera de estas dos cantidades en una cadena, genera las otras dos.
- Los números de entrada serán decimales en el formato apropiado para su idioma. La precisión debe ser de al menos 3 decimales. (Los flotadores binarios IEEE 754-2008 binary32 son suficientes).
- Cada número de entrada tendrá el sufijo de una unidad. Este será uno de
V A W R
voltaje, amperaje, potencia y resistencia (o la minúscula equivalente). Además, puede usar enΩ
lugar deR
. Las unidades no tendrán prefijos decimales (Kilo-, mili-, etc.). - Las dos cantidades de entrada se darán en cualquier orden en una cadena, separadas por un solo espacio.
- Las cantidades de entrada siempre serán números reales mayores que 0.
- La salida tendrá el mismo formato que la entrada.
- Las soluciones integradas para resolver ecuaciones no están permitidas.
Entradas de ejemplo
1W 1A
12V 120R
10A 10V
8R 1800W
230V 13A
1.1W 2.333V
Salidas correspondientes
1V 1R
0.1A 1.2W
1R 100W
120V 15A
2990W 17.692R
0.471A 4.948R
Cabe señalar que las soluciones a este desafío serán efectivamente autoinverso. En otras palabras, si aplica una solución a la entrada A B
y obtiene la salida C D
, luego aplique una solución a la entrada C D
, entonces la salida debería estar A B
nuevamente, aunque posiblemente fuera de orden y perturbada debido al redondeo de FP. Por lo tanto, las entradas y salidas de prueba se pueden usar indistintamente.
fuente
Respuestas:
Ruby 171 bytes
Entrada como argumento de función. Salida a stdout con espacio final (puede revisarse si es necesario).
Explicación
Todas las fórmulas se pueden expresar en la forma
b**x*d**y
en que b & d son los dos valores de entrada y x & y son potencias. Por razones de golf,(b**x*d**y)**0.5
finalmente se prefirió la expresión ya que significa que xey se convierten en enteros en el rango de -4 a 4.La siguiente tabla muestra las expresiones requeridas (se supone que las entradas están ordenadas alfabéticamente) y los valores codificados para las potencias. Donde x e y son las potencias duplicadas, se codifican como
(x+4)+(y+4)*9+9
o de manera equivalente(x+4)+(y+5)*9
. Esto pone todas las codificaciones en el rango ASCII imprimible. Los operadores de potencia se omiten de las fórmulas por brevedad.n
es un tipo de suma de verificación hecha de los símbolos de la unidad de entrada; puede tomar los valores 0,1,2,4,5,6 (3 no se usa)Sin golf en el programa de prueba
Salida
fuente
Python 3,
329347343339326305267251249245237 bytesEsto es bastante hinchado. Definitivamente todavía hay mucho golf por hacer.
Editar: se
corrigió temporalmente la salida. Por alguna razón, sereturn' '.join(str(eval(z[m][i]))+t[i]for i in range(2))
niega a funcionar correctamente.Editar: caído
eval
.Esta función ahora toma partes de la respuesta del nivel del río St . He cambiado el
ops
diccionario, por primera vez en un diccionario de exponentes modificadosexponent*2+4
parab**((p-4)/2) * d**((q-4)/2)
, de manera que cada unop
yq
sería un número de un dígito. Por ejemplo,b*d == b**1*d**1 == b**((6-4)/2)*d**((6-4)/2)
y el resultado estaría66
en el diccionario.Luego, convertí el diccionario en una cadena
z
con esos exponentes modificados y las unidades que se necesitan en una línea y en un orden particular. Primero, el valor ASCII de cada carácter enARVW
mod 10 es5, 2, 6, 7
. Cuando se agregan dos de estos valores, dan un número único mod 10. Por lo tanto, cada combinación de dos caracteres puede recibir un número único con(ord(x[0]) + ord(y[10] + 3) % 10
, dandoAR: 0, AV: 4, AW: 5, RV: 1, RW: 2, VW: 6
(muy similar a la suma de comprobación de Lever River St). Organizar los exponentes modificados para que estén en este orden, es decir[AR] [RV] [RW] [blank] [AV] [AW] [VW]
, permitez
acceder de manera eficiente (en términos de bytes).Editar: Golfed la lista de comprensión bajo
return
. Golfed la definición dem
.Código:
Sin golf:
fuente
Python 3,
193187 bytesPruébalo en línea
Convierte la entrada del formulario
<value> <unit> <value> <unit>
en declaraciones de asignación. Luego, useeval
en cada fórmula,try/except
ignorando los errores de aquellos para los cuales no se han asignado las variables.fuente