Introdução
O Sistema Internacional de Unidades é um sistema de medição em todo o mundo, exceto em alguns países, incluindo os EUA . O sistema SI (ou sistema métrico) é baseado em potências de dez, listadas abaixo (observe que esta é uma tabela 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
Seu trabalho será tomar uma dessas medidas e convertê-la em outra.
Entrada
A entrada será um número decimal 10^-16 < x < 2^31 - 1
, um prefixo de SI, uma letra representando uma quantidade, outro prefixo de SI para o qual converter e a mesma letra de quantidade. A entrada estará no formato 1234.56 mC to TC
e sempre corresponderá ao regex ^\d+(\.\d+)? [fpnμmchkMGTP](?'letter'[a-zA-Z]) to [fpnμmchkMGTP](?P=letter)$
. Você nunca precisará converter de / para a unidade base ( 10^0
)
Resultado
A saída será o mesmo número da entrada, apenas convertida em um novo prefixo SI. Especificamente, o programa deve converter o número de SI prefix 1
para SI prefix 2
na entrada. Exemplos:
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
Isso é código-golfe , então o código mais curto em bytes vence!
fonte
1 PB to fB
U+00B5 MICRO SIGN
ouU+03BC GREEK SMALL LETTER MU
? Podemos escolher um ou temos que apoiar um ou ambos?Respostas:
Pitão,
4644 bytesO programa assume que o caractere
µ
(U+00B5 MICRO SIGN
) é usado para o sinal de micro. No Windows, é isso que você obtém pressionando Alt Gr+ M.O código fonte contém alguns imprimíveis, então aqui está um
xxd
despejo hexadecimal reversível .Aqui está uma versão de cópia amigável:
Você pode experimentar a demonstração ou usar o conjunto de testes . Se esses links falharem, use a versão de cópia amigável ( demo , suíte de testes ).
fonte
JavaScript (ES7),
113109 bytesEdit: Aparentemente, podemos usar
µ
(U+00B5 MICRO SIGN
) para o sinal de micro agora, substituindo por que salva um byte.Para o ES6, a compatibilidade
(10**(m[p[3][0]]-m[p[1][0]]))
pode ser substituídaMath.pow(10,m[p[3][0]]-m[p[1][0]])
por 114 bytes.Explicação
Teste
Este teste usa em
Math.pow
vez de,**
para que navegadores comuns possam testá-lo.Mostrar snippet de código
fonte
Ruby (2.2.1),
126123 bytesGuardado 3 bytes graças a user81655
Explicação
Recebe entrada da linha de comando, por exemplo
ruby si.rb 1 nm to μm
Este é o meu primeiro golfe!
fonte
{f:-9,p:-6,n:-3,µ:0,m:3,c:4,h:8,k:9,M:12,G:15,T:18,P:21}
para a tabela de hash. Também é permitido substituirμ
porµ
(U+00B5
) e salvar outro byte.Haskell, 143 bytes
Ligue
s
.fonte
"f p n µ mc hk M G T P"
truque. +1x
ej
com um guarda padrão para:x y|Just n<-elemIndex(y!!0)"f p n µ mc hk M G T P"=fromIntegral n
.CJam, 67 bytes
Experimente online!
Usa
µ
(U+00B5
) para o sinal de micro, portanto, certifique-se de usá-lo em sua entrada, em vez deμ
(U+03BC
) na pergunta.Minha primeira tentativa de usar o CJam. Sinta-se livre para sugerir melhorias, porque tenho certeza de que existem muitas!
Explicação
O mesmo método da minha resposta JavaScript.
fonte
Haskell, 121 bytes
Define uma função
f :: String -> Double
. Por exemplo:fonte
Perl 5 , 113 + 8 (-p -Mutf8) = 121 bytes
Experimente online!
fonte