Latar Belakang
Tugasnya sederhana tetapi setiap programmer telah mengimplementasikannya setidaknya sekali. Stackoverflow memiliki banyak sampel, tetapi apakah mereka cukup pendek untuk menang?
Cerita masalah
Anda adalah programmer pemarah yang diberi tugas menerapkan input ukuran file untuk pengguna. Karena pengguna tidak menggunakan byte, setiap orang hanya akan memasukkan "1M", "1K", "3G", "3,14M" - tetapi Anda membutuhkan byte! Jadi, Anda menulis program untuk melakukan konversi.
Kemudian manajer Anda memberi Anda lusinan laporan pengguna dengan keluhan tentang sejumlah besar aneh dalam ukuran input file. Sepertinya Anda perlu mengkode konversi balik juga.
Apa yang perlu kamu lakukan?
Inilah triknya: Anda harus menerapkan konversi dua arah dalam satu bagian kode. Dua fungsi terpisah digunakan sesuai kebutuhan? Nah, itu terlalu sederhana - mari kita buat, pendek!
Untuk keperluan tantangan ini, "kilobyte" berarti 1024 byte, "megabyte" berarti 1024 * 1024 = 1048576 byte, dan "gigabytle" berarti 1024 * 1024 * 1024 = 1073741824 byte.
Uji data
Input -> Output
5 -> 5
1023 -> 1023
1024 -> 1K
1K -> 1024
1.5K -> 1536
1536 -> 1.5K
1048576 -> 1M
1M -> 1048576
Aturan
- Nilai tes tidak akan melebihi 2 * 1024 * 1024 * 1024 atau 2G
- Postfix berikut digunakan oleh pengguna: K untuk kilobyte, M untuk megabyte, G untuk gigabyte
- Kode tidak diperlukan untuk bekerja dengan angka negatif
- Jangan gunakan perpustakaan eksternal (mis.
BCMath
Dalam PHP) selain yang dibundel (mis.math.h
) - Celah standar tidak diijinkan
- Kode seharusnya tidak menghasilkan apa pun di stderr
- Program Anda dapat mengambil input dan menghasilkan output menggunakan metode standar
Jawaban:
Python 2,
204190 byteIni adalah codegolf pertama saya.
sumber
Pip, 60 byte
Mengambil input dari baris perintah (ditugaskan ke
a
variabel) dan output ke stdout.Versi tidak disatukan:
Algoritma:
i
dari 1 hingga 3:a >= 1024
, ini adalah nilai byte yang perlu dikonversi ke unit yang lebih besar:a
dengan 1024x
menjadi nilai saat ini yanga
disatukan dengan unit saat inix
diatur oleh langkah sebelumnya, keluarkan. Jika tidak,a
kurang dari 1024 (dengan kemungkinan akhiran unit), jadi:a
jika memiliki salah satuKMG
di bagian akhir: terjemahkan surat ke kekuatan yang sesuai 1024 dan gandakan jumlahnya dengan hasilnya.sumber
JavaScript,
144106 byteIni pasti bisa dipersingkat, dan akan dilakukan nanti. Hanya ingin mendapatkan sesuatu yang jelek di sana;)
sumber
Python2 199 byte
ini konyol tapi berhasil (mengabaikan pertanyaan presisi desimal) selama Anda memiliki puluhan gigabytes RAM. jangan jalankan sebaliknya, mesin Anda mungkin membeku dan terkunci. Hal pertama yang dilakukannya adalah mengalokasikan bilangan bulat 2gigabyte.
sumber
C
206183 byteSingkirkan sebanyak yang saya bisa.
Keluaran
Penjelasan
sumber