Gunakan huruf untuk membuat angka lebih pendek

9

Tantangan

Ambil nomor dan keluarkan dengan 4 digit atau kurang menggunakan huruf dan angka. Sebagai contoh; 270,030akan berubah menjadi 270K.

Kunci

Miliar -> B

Juta -> M

Ribuan -> K

Aturan

  • Anda dapat memilih untuk menerima nomor input yang menyertakan koma yang membatasi setiap tiga tempat desimal (seperti 123,456,789).
  • Membulatkan ke terdekat, setengah atas.
  • Angka hanya akan naik ke 999,499,999,999.
  • Bagian mantissa dari jawabannya harus setidaknya 1.
  • Semua huruf harus huruf besar dan seperti yang ditentukan di atas.
  • Output harus 4 digit atau kurang. (termasuk surat-surat seperti B, K, dan M)
  • Keluaran harus setepat matematis mungkin. Contoh:
    • 15,480-> 20K TIDAK OK
    • 15,480-> 15.5K BAIK
  • Jika ada beberapa keluaran dengan ketepatan matematika yang sama, kembalikan salah satunya. Contoh:
    • 1000-> 1000 BAIK
    • 1000-> 1K BAIK

Contoh:

1.234.567 -> 1.23M
999.500 -> 1 jt
999.499 -> 999K
102 -> 102
1000 -> 1K
1001 -> 1001
100.000 -> 100K
12.345.678.912 -> 12,3B
1.452.815.612 -> 1.45B

Pengajuan

zoecarver
sumber

Jawaban:

2

JavaScript, 84 79 byte

i=>{I=i;for(x=-1;i>=999.5;x++)i/=1e3;return I<1e4?I:+i.toPrecision(3)+'KMB'[x]}

Cobalah online!

(Mengambil input sebagai angka)

Kasus khusus yang pertama di mana jika i < 1000, nomor itu sendiri selalu merupakan salah satu cara terpendek, jika bukan satu-satunya cara terpendek.

Kalau tidak, ia membaginya dengan 1000 sampai membaginya akan membuatnya tidak memiliki angka signifikan di atas 1, dan memilih akhiran berdasarkan pada berapa banyak divisi yang dilakukan.

Artyer
sumber
Kasing terakhir harus 999.5M, atau mungkin tidak, tidak pasti berdasarkan spesifikasi yang longgar.
Magic Gurita Guci
Ingatlah bahwa Anda perlu mendukung hingga satu triliun.
GarethPW
@ GarethPW Tidak ada cara untuk mewakili angka di atas 999.499.999.999 sesuai dengan spec (Tidak T -> trilliondi kunci), jadi saya berasumsi ini adalah batas atas. Saya akan bertanya, tetapi kerugian satu byte sebaliknya.
Artyer
1

Python 3 , 127 byte

def f(n):s=str(n);l=len(s)-4;return f"{round(n,~l):,}"[:4].replace(*",.").rstrip('.')+"KMBT"[l//3+(int(s[3])>4)]if n>9999else n

Cobalah online!

GarethPW
sumber
sedikit lebih pendek:def f(n):l=len(str(n))-4;return[n,f"{round(n,~l):,}"[:4].replace(*",.").rstrip('.')+"KMBT"[-~l//3]][n>9999]
wrymug
1
@Jonathan Allan Nothing. Kesalahanku.
Artyer
@rosslh Saya memang membuat perubahan itu tetapi tidak bisa menyimpannya ketika memperbaiki bug 999499 -> 999M.
GarethPW
1

JavaScript (ES7), 74 byte

n=>n<1e4?n:(c=n.toExponential(2).split`e`).shift()*10**(c%3)+' KMB'[c/3|0]

JavaScript (ES6), 80 byte

n=>n<1e4?n:(c=n.toExponential(2).split`e`).shift()*[1,10,100][c%3]+' KMB'[c/3|0]

Rick Hitchcock
sumber