Utilisez des lettres pour raccourcir les chiffres

9

Défi

Prenez un nombre et sortez-le avec 4 chiffres ou moins en utilisant des lettres et des chiffres. Par exemple; 270,030se transformerait en 270K.

Clé

Milliard -> B

Million -> M

Mille -> K

Règles

  • Vous pouvez choisir d'accepter les nombres d'entrée qui incluent des virgules délimitant toutes les trois décimales (comme 123,456,789).
  • Arrondi au plus proche, demi-hauteur.
  • Les chiffres ne feront que monter 999,499,999,999.
  • La partie mantisse de la réponse doit être d'au moins 1.
  • Toutes les lettres doivent être en majuscules et comme spécifié ci-dessus.
  • Les sorties doivent comporter 4 chiffres ou moins. (y compris les lettres telles que B, Ket M)
  • Les sorties doivent être aussi précises que possible sur le plan mathématique. Exemple:
    • 15,480-> 20K PAS OK
    • 15,480-> 15.5K BON
  • S'il existe plusieurs sorties avec la même précision mathématique, renvoyez l'une ou l'autre. Exemple:
    • 1000-> 1000 BON
    • 1000-> 1K BON

Exemples:

1.234.567 -> 1.23M
999,500 -> 1M
999,499 -> 999K
102 -> 102
1000 -> 1K
1001 -> 1001
100 000 -> 100 K
12,345,678,912 -> 12,3B
1.452.815.612 -> 1.45B

Soumissions

Zoecarver
la source

Réponses:

2

JavaScript, 84 79 octets

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

Essayez-le en ligne!

(Prend les entrées sous forme de nombres)

Cas particuliers le premier où si i < 1000, le nombre lui-même est toujours l'un des moyens les plus courts, sinon le seul moyen le plus court.

Sinon, il le divise par 1000 jusqu'à ce que le diviser ne lui donne aucun chiffre significatif au-dessus de 1, et choisit un suffixe en fonction du nombre de divisions effectuées.

Artyer
la source
Le dernier cas devrait être 999,5 M, ou peut-être pas, incertain sur la base de spécifications lâches.
Magic Octopus Urn
N'oubliez pas que vous devez prendre en charge jusqu'à un billion.
GarethPW
@GarethPW Il n'y a aucun moyen de représenter des nombres supérieurs à 999 499 999 999 selon la spécification (non T -> trilliondans la clé), j'ai donc supposé que c'était la limite supérieure. Je vais demander, mais c'est une perte d'un octet sinon.
Artyer
1

Python 3 , 127 octets

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

Essayez-le en ligne!

GarethPW
la source
un peu plus court: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 Rien. Mon erreur.
Artyer
@rosslh J'ai fait cette modification mais je n'ai pas pu la conserver lors de la correction du bogue 999499 -> 999M.
GarethPW
1

JavaScript (ES7), 74 octets

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

JavaScript (ES6), 80 octets

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

Rick Hitchcock
la source