Pengantar:
Seperti Twitter, Instagram, dan lainnya, saya ingin menampilkan angka suka 1.2K
dan 3.8 M
bukan 1,222
atau 3,823,456
.
Tapi bukan itu saja! Seperti yang kita semua tahu, mungkin ada beberapa manusia yang pasti tidak akan menyukai singkatan ini dan akan mencoba untuk membalikkannya. Jadi, 1.2k
akan menjadi 1,200
dan 3.8 M
akan menjadi 3,800,000
.
Tugas:
- tugas Anda adalah menulis program atau fungsi yang mengubah daftar angka ( yang diberikan sebagai string ) menjadi pasangan singkatannya dan sebaliknya.
Misalnya, jika daftar input (atau apa saja STDIN
) adalah ['1.4k', '1,234,567', '7.99M']
, maka Anda harus menampilkan:
['1,400', '1.2M', '7,990,000']
Anda dapat mengikuti skema singkatan berikut:
- 10 3 -> satu kilo -> K
- 10 6 -> satu juta -> M
- 10 9 -> satu miliar -> B
Kode Anda dapat mengasumsikan semua huruf kecil, semua huruf besar, huruf besar atau huruf kecil untuk input dan menggunakan semua ini untuk output, tetapi harus konsisten.
Aturan dan batasan:
- Anda dapat menulis program atau fungsi, mengambil input melalui
STDIN
(atau alternatif terdekat), argumen baris perintah atau argumen fungsi dan mengeluarkan hasilnya melaluiSTDOUT
(atau alternatif terdekat), nilai fungsi kembali atau parameter fungsi (keluar). - input mungkin dalam format string atau daftar yang mudah digunakan. Anda dapat mengasumsikan bahwa jumlahnya kurang dari masing-masing dan bahwa daftar tersebut mengandung setidaknya satu elemen.
ai
231
- setiap nomor yang disingkat hanya akan berisi satu
.
sedangkan nomor normal akan berisi sebanyak yang,
diperlukan (Anda dapat mengasumsikan bahwa nomor ini tidak akan diubah). - Anda MUNGKIN TIDAK memasukkan nomor
'123456'
melainkan123,456
- aturan kode-golf standar berlaku.
Kasus uji:
Input: ['1.5M', '77.6k', '123,456,789'] Output: ['1,500,000', '77,600', '123.4M']
Input: ['3,000,000,000', '581k', '2b'] Output: ['3B', '581,000', '2,000,000,000']
Input: ['0.1k'] Output: ['100']
Input: ['888', '33'] Output: ['0.888k', '0.033k']
Klarifikasi:
- untuk angka <1000 setelah titik desimal dalam keluaran singkatan Anda harus memiliki digit sebanyak yang diperlukan untuk mendapatkan hasil yang benar. (misalnya:
2
-> akan menjadi0.002k
) - itu berarti paling banyak 3 desimal ; untuk angka> 1000 Anda dapat memiliki maksimal 1 desimal . - singkatan mungkin dalam huruf kecil atau besar
- Saya menghapus batasan bawaan seperti yang disarankan dalam komentar
Kode terpendek dalam byte menang!
'123,456,789' -> '123.4M'
? Juga, ini tidak menjelaskan berapa banyak desimal yang digunakan. Tentunya apapun yang di bawah 1000 seharusnya tidak perlu disingkat lagi.["k", "M", "G"]
. Apa artinya "sementara angka normal akan mengandung sebanyak, seperlunya " berarti, di negara saya itu akan menjadi kesalahan untuk menggunakan.Jawaban:
PHP,
234224213201205 byte6 byte disimpan oleh insertusername di sini, 4 byte terinspirasi oleh itu.
-r
-2 byte jika garis bawah sebagai pemisah tidak masalah: Ganti
" "
dengan_
.-1 byte jika pembulatan yang benar ok: Ganti
($y*10|0)/10
denganround($y,1)
.-17 byte untuk PHP 7.1: Ganti
substr($x,strlen($x)-1)
dengan$x[-1]
.80 (63) byte untuk memperluas satu argumen saja:
simpan ke file, kemudian jalankan (atau ganti
<?=
denganecho
+ spasi dan jalankan dengan-r
.sumber
for($j=1;$x=$argv[$j++];)
- bukanforeach($argv as$i=>$x)if($i)
kmb[$i]
- bukan"kmb"[$i]
.JavaScript,
545524522518514508504498494214 byteTerima kasih kepada @ETHproductions untuk menghemat 180 byte!
Untuk memanggil fungsi:
Keluaran sebagai
alert
, di mana masingalert
- masing berisi elemen input yang berbedaVersi yang dapat dibaca:
Ringkasan hasil edit: fungsi yang dikonversi ke fungsi panah
var
|0
bukan lantai.reverse().join''
sumber