Desafío
Dada una lista de unidades base SI, una lista de ecuaciones y un objetivo, debe derivar las unidades del objetivo utilizando solo las unidades base.
Unidades derivadas
De Wikipedia:
El Sistema Internacional de Unidades (SI) especifica un conjunto de siete unidades base de las cuales se derivan todas las demás unidades de medida del SI. Cada una de estas otras unidades (unidades derivadas del SI) es adimensional o puede expresarse como un producto de potencias de una o más de las unidades base.
Por ejemplo, la unidad de área derivada del SI es el metro cuadrado (m 2 ), y la unidad de densidad derivada del SI es el kilogramo por metro cúbico (kg / m 3 o kg m −3 ).
Las siete unidades base del SI son:
- Amperio, A
- Candela, cd
- Kelvin, K
- Kilogramo, kg
- Metro, m
- Topo, mol
- Segundo, s
Ejemplo
Entrada
Unidades base:
d [m]
m [kg]
t [s]
Ecuaciones:
v = d/t
a = v/t
F = m*a
E = F*d
Objetivo:
E
Salida
E [kg*m*m/s/s]
Entrada
Unidades base:
G [cd]
L [m]
y [A]
a [K]
Ecuaciones:
T = y*y/L
A = T*G
Objetivo:
A
Salida
A [cd*A*A/m]
Reglas
Las unidades siempre se entregarán en la forma
a [b]
Donde a
habrá una sola letra alfabética en mayúscula o minúscula y b
será una unidad (uno o más caracteres).
La ecuación tendrá la forma
a = c
Donde c
habrá una expresión que solo usará unidades previamente definidas y los operadores *
y /
.
Los poderes deben ser ampliados. Por ejemplo, la unidad de área es oficialmente m^2
, pero debe representar esto como m*m
. Lo mismo se aplica a potencias negativas tales como la velocidad ( m*s^-1
), que deben ser representados como una división: m/s
. Del mismo modo, las unidades de aceleración, m/s^2
o m*s^-2
, deben representarse como m/s/s
.
No tiene que cancelar nada. Por ejemplo, una salida C*s/kg/s
es válida aunque puede cancelarse a C/kg
.
No hay un orden específico para la multiplicación: kg*s/m
, s/m*kg
, s*kg/m
son todos válidos (pero /m*s*kg
no es válido).
Nota: nunca tendrá que dividir por una unidad derivada.
Victorioso
El código más corto en bytes gana
Respuestas:
Retina ,
5048 bytesPruébalo en línea!
Explicación
Elimine todos los signos iguales junto con el espacio en frente de ellos. ¿Quién los necesita de todos modos ...
Esto realiza las sustituciones de cantidades conocidas. Coincide repetidamente con una definición de cantidad (la cantidad es cualquier carácter delante de un espacio y la definición de la cadena después de él), así como en algún lugar después de la definición donde se usa esa cantidad e inserte la definición para el uso. Excluimos unidades de esas coincidencias (asegurando que no haya ninguna
]
después de la coincidencia), por lo que no reemplazamos[m]
con,[[kg]]
por ejemplo. Esta sustitución se repite hasta que la expresión regular ya no coincida (lo que significa que no quedan usos de una cantidad y que todas las líneas se han convertido en expresiones de unidades).Descarte todos menos la última línea.
Finalmente, elimine los corchetes extraños. Básicamente, queremos mantener el primero
[
y el último]
pero descartar todos los demás. Esos otros siempre aparecen con un operador en el medio, ya sea como]*[
o como]/[
. Pero lo que es más importante, esos son los únicos casos en los que a]
sigue dos caracteres más. Así que combinamos todos]
con dos caracteres después de ellos y los reemplazamos con el segundo de esos tres caracteres para retener al operador.fuente
JavaScript (ES6),
155153152 bytesToma unidades base y ecuaciones como matrices de cadenas.
Mostrar fragmento de código
Explicación
fuente