Calcular un producto o relación de unidades SI.
Por ejemplo, kg m / s s
(kilogramo-metro por segundo al cuadrado) debería regresar N
(newton).
La entrada siempre será:
- Una lista de símbolos para unidades SI, separadas por espacios (que representan un producto) o
- Lo anterior,
/
y lo anterior (que representa una relación).
La entrada nunca contendrá ningún otro carácter (como literales numéricos u otros signos de puntuación).
Puede suponer que esto siempre será igual a una sola unidad SI.
Use los siguientes símbolos:
Base quantities:
s # second
m # meter
kg # kilogram
A # ampere
Derived quantities:
N = kg m / s s # newton
J = N m # joule
W = J / s # watt
Hz = W / J # hertz
Pa = N / m m # pascal
C = s A # coulomb
V = J / C # volt
F = C / V # farad
Ω = V / A # ohm (you may use the O symbol instead, for a penalty of +3 bytes)
S = A / V # siemens
Wb = J / A # weber
T = Wb / m m # tesla
H = Wb / A # henry
Ejemplos:
m => m
N m => J
J / W => s
A J / W => C
T m m => Wb
N / A m => T
V s / A => H
J S / F A => V
s / s s => Hz
Hz kg m Hz => N
Hz s / Ω => S
Wb / H => A
V Pa S s / C => Pa
N s / m Hz => kg
V A => W
s / Ω => F
J / A s A => Ω
El código más corto (en bytes) gana.
kg m / s s
en realidad serían kilogam-metro-segundos por segundo, o simplemente kilogramo-metros. Multiplicación y división de trabajo LTR. Lo que estás buscando eskg m / (s s)
. Esto también se aplica a los otros ejemplos.1 / 2x
Realmente significax / 2
?Respuestas:
CJAM,
1841059896 bytesLo anterior es un hexdump; Se puede revertir con
xxd -r
.Verifique todos los casos de prueba a la vez en el intérprete de CJam . 1
Prueba de funcionamiento
Idea
Podemos codificar cada unidad u = s a m b kg c A d como el vector t u = (a + c - d, b, c, d) . 2
De esta manera, para la entrada u 1 ... u n / v 1 ... v m , solo tenemos que calcular (t u 1 + ... + t u n ) - (t v 1 + ... + t v m ) y verificar qué unidad corresponde a
Código
1 Tenga en cuenta que, debido a las limitaciones del intérprete en línea, no puedo usar una codificación diferente para el código fuente y la E / S. Por lo tanto, el símbolo Ω aparece como su codificación UTF-8 (Î ©). El intérprete oficial de Java no comparte esta limitación.
2 Esto ahorra algunos bytes sobre la asignación directa a (a, b, c, d) , ya que acorta el rango de la primera coordenada.
fuente
GNU sed, 1118
Demasiado tiempo pero hace el trabajo.
La puntuación incluye +1 para la
-r
opción de sed. Como si importara aquí. La puntuación excluye los comentarios.fuente
Javascript ES6, 479 bytes
Sin golf:
Pruebas de funcionamiento:
fuente