Usa le lettere per ridurre i numeri


9

Sfida

Prendi un numero e stampalo con 4 cifre o meno usando lettere e numeri. Per esempio; 270,030si trasformerebbe in 270K.

Chiave

Miliardi -> B

Milioni -> M

Mille -> K

Regole

  • Puoi scegliere di accettare numeri di input che includono virgole che delimitano ogni tre cifre decimali (come 123,456,789).
  • Arrotonda al più vicino, a metà.
  • I numeri saliranno solo a 999,499,999,999.
  • La parte della mantissa della risposta dovrebbe essere almeno 1.
  • Tutte le lettere devono essere maiuscole e come specificato sopra.
  • Le uscite devono contenere 4 o meno cifre. (incluse le lettere come B, Ke M)
  • Gli output devono essere il più matematicamente precisi possibile. Esempio:
    • 15,480-> 20K NON OK
    • 15,480-> 15.5K BUONO
  • Se sono presenti più uscite con la stessa precisione matematica, restituire una delle due. Esempio:
    • 1000-> 1000 BUONO
    • 1000-> 1K BUONO

Esempi:

1.234.567 -> 1,23 milioni
999.500 -> 1M
999.499 -> 999K
102 -> 102
1000 -> 1K
1001 -> 1001
100.000 -> 100 K.
12.345.678.912 -> 12,3 B.
1.452.815.612 -> 1,45 B

Inseriti

Risposte:


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]}

Provalo online!

(Accetta input come numeri)

Casi speciali il primo in cui if i < 1000, il numero stesso è sempre uno dei modi più brevi, se non l'unico modo più breve.

Altrimenti, lo divide per 1000 fino a quando non lo dividerebbe non avrebbe cifre significative al di sopra di 1, e sceglie un suffisso in base a quante divisioni sono state fatte.


L'ultimo caso dovrebbe essere 999,5 M, o forse no, incerto sulla base di specifiche libere.
Magic Octopus Urn

Ricorda che devi supportare fino a un trilione.
GarethPW,

@GarethPW Non c'è modo di rappresentare numeri superiori a 999.499.999.999 secondo le specifiche (No T -> trillionnella chiave), quindi ho ipotizzato che questo fosse il limite superiore. Chiederò, ma è una perdita di un byte altrimenti.
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

Provalo online!


un po 'più breve:def f(n):l=len(str(n))-4;return[n,f"{round(n,~l):,}"[:4].replace(*",.").rstrip('.')+"KMBT"[-~l//3]][n>9999]
wrymug

1
@JonathanAllan Nothing. Errore mio.
Artyer,

@rosslh Ho apportato questa modifica ma non sono riuscito a mantenerlo durante la correzione del 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]

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.