Verwenden Sie Buchstaben, um Zahlen kürzer zu machen

9

Herausforderung

Nehmen Sie eine Zahl und geben Sie sie mit maximal 4 Ziffern aus Buchstaben und Zahlen aus. Beispielsweise; 270,030würde sich in verwandeln 270K.

Schlüssel

Milliarden -> B

Millionen -> M

Tausend -> K

Regeln

  • Sie können auch Eingabenummern akzeptieren, die Kommas enthalten, die alle drei Dezimalstellen begrenzen (z. B. 123,456,789).
  • Rund zum nächsten, halb hoch.
  • Zahlen werden nur bis gehen 999,499,999,999.
  • Der Mantissen-Teil der Antwort sollte mindestens 1 sein.
  • Alle Buchstaben müssen in Großbuchstaben und wie oben angegeben sein.
  • Die Ausgänge müssen 4 oder weniger Stellen umfassen. (einschließlich Buchstaben wie B, K, und M)
  • Die Ausgaben müssen so mathematisch genau wie möglich sein. Beispiel:
    • 15,480-> 20K NICHT OK
    • 15,480-> 15.5K GUT
  • Wenn mehrere Ausgaben mit derselben mathematischen Genauigkeit vorhanden sind, geben Sie eine zurück. Beispiel:
    • 1000-> 1000 GUT
    • 1000-> 1K GUT

Beispiele:

1,234,567 -> 1,23M
999.500 -> 1M
999.499 -> 999K
102 -> 102
1000 -> 1K
1001 -> 1001
100.000 -> 100K
12,345,678,912 -> 12,3B
1,452,815,612 -> 1,45B

Einsendungen

Zoecarver
quelle

Antworten:

2

JavaScript, 84 79 Bytes

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

Probieren Sie es online aus!

(Nimmt Eingaben als Zahlen)

Sonderfälle der erste, bei dem wenn i < 1000, die Nummer selbst immer einer der kürzesten Wege ist, wenn nicht der einzige kürzeste Weg.

Andernfalls wird es durch 1000 geteilt, bis es durch Teilen keine signifikanten Zahlen über 1 aufweist, und es wird ein Suffix ausgewählt, das darauf basiert, wie viele Unterteilungen vorgenommen wurden.

Artyer
quelle
Der letzte Fall sollte 999,5 M betragen oder nicht, basierend auf losen Spezifikationen.
Magic Octopus Urn
Denken Sie daran, dass Sie bis zu einer Billion unterstützen müssen.
GarethPW
@GarethPW Es gibt keine Möglichkeit, Zahlen über 999.499.999.999 gemäß der Spezifikation (Nein T -> trillionim Schlüssel) darzustellen , daher habe ich angenommen, dass dies die Obergrenze ist. Ich werde fragen, aber sonst ist es ein Ein-Byte-Verlust.
Artyer
1

Python 3 , 127 Bytes

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

Probieren Sie es online aus!

GarethPW
quelle
etwas kürzer: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 Nichts. Mein Fehler.
Artyer
@rosslh Ich habe diese Änderung vorgenommen, konnte sie aber beim Beheben des 999499 -> 999M-Fehlers nicht beibehalten.
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
quelle