pengantar
Sistem Satuan Internasional adalah sistem pengukuran di seluruh dunia, kecuali untuk beberapa negara termasuk AS . Sistem SI (atau sistem metrik) didasarkan pada kekuatan sepuluh, tercantum di bawah (perhatikan bahwa ini adalah tabel yang tidak lengkap):
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
Tugas Anda adalah mengambil salah satu dari tindakan ini dan mengubahnya menjadi tindakan lain.
Memasukkan
Input akan berupa angka desimal 10^-16 < x < 2^31 - 1
, awalan SI, huruf yang mewakili kuantitas, awalan SI lain untuk dikonversi, dan huruf kuantitas yang sama. Input akan berada dalam format 1234.56 mC to TC
, dan akan selalu cocok dengan regex ^\d+(\.\d+)? [fpnμmchkMGTP](?'letter'[a-zA-Z]) to [fpnμmchkMGTP](?P=letter)$
. Anda tidak perlu mengonversi ke / dari unit dasar ( 10^0
)
Keluaran
Output akan menjadi nomor yang sama dengan input, baru saja dikonversi ke awalan SI baru. Secara khusus, program harus mengonversi angka dari SI prefix 1
menjadi SI prefix 2
dalam input. Contoh:
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
Ini adalah kode-golf , jadi kode terpendek dalam byte menang!
sumber
1 PB to fB
U+00B5 MICRO SIGN
atauU+03BC GREEK SMALL LETTER MU
? Bisakah kita memilih salah satu atau kita harus mendukung satu atau keduanya?Jawaban:
Pyth,
4644 byteProgram mengasumsikan bahwa karakter
µ
(U+00B5 MICRO SIGN
) digunakan untuk tanda mikro. Di Windows, inilah yang Anda dapatkan dengan menekan Alt Gr+ M.Kode sumber mengandung beberapa unsintables, jadi di sini adalah
xxd
dump hex reversibel .Ini versi ramah-salinan:
Anda dapat mencoba demo atau menggunakan test suite . Jika tautan ini gagal, gunakan versi ramah-salin ( demo , test suite )
sumber
JavaScript (ES7),
113109 byteSunting: Rupanya kita bisa menggunakan
µ
(U+00B5 MICRO SIGN
) untuk tanda mikro sekarang, jadi ganti dengan yang menghemat satu byte.Untuk kompatibilitas ES6
(10**(m[p[3][0]]-m[p[1][0]]))
dapat diganti denganMath.pow(10,m[p[3][0]]-m[p[1][0]])
untuk 114 byte.Penjelasan
Uji
Tes ini digunakan
Math.pow
alih-alih**
agar browser umum dapat mengujinya.Tampilkan cuplikan kode
sumber
Ruby (2.2.1),
126123 byteDisimpan 3 byte berkat pengguna81655
Penjelasan
Mengambil input dari command line misalnya
ruby si.rb 1 nm to μm
Ini golf pertama saya!
sumber
{f:-9,p:-6,n:-3,µ:0,m:3,c:4,h:8,k:9,M:12,G:15,T:18,P:21}
untuk tabel hash. Juga menggantiμ
denganµ
(U+00B5
) diperbolehkan dan akan menghemat byte lain.Haskell, 143 byte
Panggil
s
.sumber
"f p n µ mc hk M G T P"
trik Anda . +1x
danj
dengan penjaga pola:x y|Just n<-elemIndex(y!!0)"f p n µ mc hk M G T P"=fromIntegral n
.CJam, 67 byte
Cobalah online!
Menggunakan
µ
(U+00B5
) untuk tanda mikro jadi pastikan Anda menggunakan ini pada input Anda alih-alihμ
(U+03BC
) dalam pertanyaan.Upaya pertama saya menggunakan CJam. Jangan ragu untuk menyarankan perbaikan karena saya yakin ada banyak!
Penjelasan
Metode yang sama dengan jawaban JavaScript saya.
sumber
Haskell, 121 byte
Menentukan fungsi
f :: String -> Double
. Sebagai contoh:sumber
Perl 5 , 113 + 8 (-p -Mutf8) = 121 byte
Cobalah online!
sumber