Einführung
Das Internationale Einheitensystem ist ein Messsystem auf der ganzen Welt, mit Ausnahme einiger weniger Länder, einschließlich der USA . Das SI-System (oder metrische System) basiert auf den unten aufgeführten Zehnerpotenzen (beachten Sie, dass dies eine unvollständige Tabelle ist):
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
Ihre Aufgabe wird es sein, eine dieser Maßnahmen zu ergreifen und in eine andere umzuwandeln.
Eingang
Die Eingabe erfolgt durch eine Dezimalzahl 10^-16 < x < 2^31 - 1
, ein SI-Präfix, einen Buchstaben, der eine Menge darstellt, ein weiteres SI-Präfix, in das konvertiert werden soll, und denselben Mengenbuchstaben. Die Eingabe hat das Format 1234.56 mC to TC
und stimmt immer mit dem regulären Ausdruck überein ^\d+(\.\d+)? [fpnμmchkMGTP](?'letter'[a-zA-Z]) to [fpnμmchkMGTP](?P=letter)$
. Sie müssen niemals zur / von der Basiseinheit konvertieren ( 10^0
)
Ausgabe
Die Ausgabe hat dieselbe Nummer wie die Eingabe und wurde gerade in ein neues SI-Präfix konvertiert. Insbesondere sollte das Programm die Zahl von SI prefix 1
in SI prefix 2
in die Eingabe konvertieren . Beispiele:
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
Dies ist Code-Golf , also gewinnt der kürzeste Code in Bytes!
quelle
1 PB to fB
U+00B5 MICRO SIGN
oderU+03BC GREEK SMALL LETTER MU
? Können wir entweder eine auswählen oder müssen wir eine oder beide unterstützen?Antworten:
Pyth,
4644 BytesDas Programm geht davon aus, dass das Zeichen
µ
(U+00B5 MICRO SIGN
) für das Mikrozeichen verwendet wird. Unter Windows erhalten Sie dies durch Drücken von Alt Gr+ M.Der Quellcode enthält einige nicht druckbare Dateien. Hier ist also ein umkehrbarer
xxd
Hex-Dump.Hier ist eine kopierfreundliche Version:
Sie können die Demo ausprobieren oder die verwenden Testsuite verwenden . Wenn diese Links fehlschlagen, verwenden Sie die kopierfreundliche Version ( Demo , Testsuite ).
quelle
JavaScript (ES7),
113109 ByteBearbeiten: Anscheinend können wir jetzt
µ
(U+00B5 MICRO SIGN
) für das Mikrozeichen verwenden, so dass das Ersetzen durch dieses ein Byte spart.Aus Gründen der ES6-Kompatibilität
(10**(m[p[3][0]]-m[p[1][0]]))
kann die durchMath.pow(10,m[p[3][0]]-m[p[1][0]])
114 Bytes ersetzt werden.Erläuterung
Prüfung
Dieser Test wird
Math.pow
anstelle von verwendet,**
damit gängige Browser ihn testen können.Code-Snippet anzeigen
quelle
Ruby (2.2.1),
126123 Bytes3 Benutzer dank user81655 gespeichert
Erläuterung
Übernimmt Eingaben über die Befehlszeile, z
ruby si.rb 1 nm to μm
Dies ist mein erster Golf!
quelle
{f:-9,p:-6,n:-3,µ:0,m:3,c:4,h:8,k:9,M:12,G:15,T:18,P:21}
für die Hash-Tabelle verwenden. Auch das Ersetzenμ
durchµ
(U+00B5
) ist zulässig und speichert ein weiteres Byte.Haskell, 143 Bytes
Rufen Sie an
s
.quelle
"f p n µ mc hk M G T P"
Trick sehr. +1x
undj
mit einem Musterschutz :x y|Just n<-elemIndex(y!!0)"f p n µ mc hk M G T P"=fromIntegral n
.CJam, 67 Bytes
Probieren Sie es online aus!
Verwendet
µ
(U+00B5
) für das Mikrozeichen, stellen Sie also sicher, dass Sie dies in Ihrer Eingabe anstelle vonμ
(U+03BC
) in der Frage verwenden.Mein erster Versuch, CJam zu verwenden. Sie können gerne Verbesserungen vorschlagen, da ich sicher bin, dass es viele gibt!
Erläuterung
Gleiche Methode wie meine JavaScript-Antwort.
quelle
Haskell, 121 Bytes
Definiert eine Funktion
f :: String -> Double
. Zum Beispiel:quelle
Perl 5 , 113 + 8 (-p -Mutf8) = 121 Bytes
Probieren Sie es online aus!
quelle