Introducción
El Sistema Internacional de Unidades es un sistema de medición en todo el mundo, excepto en algunos países, incluidos los EE . UU . El sistema SI (o sistema métrico) se basa en potencias de diez, que se enumeran a continuación (tenga en cuenta que esta es una tabla incompleta):
femto(f) pico(p) nano(n) micro(μ) milli(m) centi(c) (base unit) hecto(h) kilo(k) mega(M) giga(G) tera(T) peta(P)
10^-15 10^-12 10^-9 10^-6 10^-3 10^-2 10^0 10^2 10^3 10^6 10^9 10^12 10^15
Su trabajo será tomar una de estas medidas y convertirla en otra.
Entrada
La entrada será un número decimal 10^-16 < x < 2^31 - 1
, un prefijo SI, una letra que representa una cantidad, otro prefijo SI para convertir y la misma letra de cantidad. La entrada estará en el formato 1234.56 mC to TC
y siempre coincidirá con la expresión regular ^\d+(\.\d+)? [fpnμmchkMGTP](?'letter'[a-zA-Z]) to [fpnμmchkMGTP](?P=letter)$
. Nunca tendrá que convertir a / desde la unidad base ( 10^0
)
Salida
La salida será el mismo número que la entrada, recién convertida a un nuevo prefijo SI. Específicamente, el programa debe convertir el número de SI prefix 1
a SI prefix 2
en la entrada. Ejemplos:
Input: 1 nm to μm
Output: 0.001
Input: 82 kC to cC
Output: 8200000
Input: 6.54 MK to hK
Output: 65400
Input: 2000 MB to GB
Output: 2
Este es el código de golf , por lo que gana el código más corto en bytes.
fuente
1 PB to fB
U+00B5 MICRO SIGN
oU+03BC GREEK SMALL LETTER MU
? ¿Podemos elegir uno o tenemos que apoyar uno o ambos?Respuestas:
Pyth,
4644 bytesEl programa asume que el carácter
µ
(U+00B5 MICRO SIGN
) se usa para el micro signo. En Windows, esto es lo que obtienes presionando Alt Gr+ M.El código fuente contiene algunos no imprimibles, así que aquí hay un
xxd
volcado hexadecimal reversible .Aquí hay una versión fácil de copiar:
Puede probar la demostración o usar el conjunto de pruebas . Si estos enlaces fallan, use la versión fácil de copiar ( demo , conjunto de pruebas ).
fuente
Javascript (ES7),
113109 bytesEditar: Aparentemente podemos usar
µ
(U+00B5 MICRO SIGN
) para el micro signo ahora, por lo que reemplazarlo ahorra un byte.Para ES6, la compatibilidad
(10**(m[p[3][0]]-m[p[1][0]]))
se puede reemplazarMath.pow(10,m[p[3][0]]-m[p[1][0]])
por 114 bytes.Explicación
Prueba
Esta prueba se usa en
Math.pow
lugar de**
para que los navegadores comunes puedan probarla.Mostrar fragmento de código
fuente
Ruby (2.2.1),
126123 bytesGuardado 3 bytes gracias a user81655
Explicación
Toma datos de la línea de comando, por ejemplo
ruby si.rb 1 nm to μm
Este es mi primer golf!
fuente
{f:-9,p:-6,n:-3,µ:0,m:3,c:4,h:8,k:9,M:12,G:15,T:18,P:21}
para la tabla hash. También se permite reemplazarμ
conµ
(U+00B5
) y guardará otro byte.Haskell, 143 bytes
Llamar
s
.fuente
"f p n µ mc hk M G T P"
truco. +1x
yj
con un guardia de patrón a:x y|Just n<-elemIndex(y!!0)"f p n µ mc hk M G T P"=fromIntegral n
.CJam, 67 bytes
Pruébalo en línea!
Usa
µ
(U+00B5
) para el micro signo, así que asegúrese de usar esto en su entrada en lugar deμ
(U+03BC
) en la pregunta.Mi primer intento de usar CJam. ¡No dude en sugerir mejoras porque estoy seguro de que hay muchas!
Explicación
El mismo método que mi respuesta de JavaScript.
fuente
Haskell, 121 bytes
Define una función
f :: String -> Double
. Por ejemplo:fuente
Perl 5 , 113 + 8 (-p -Mutf8) = 121 bytes
Pruébalo en línea!
fuente