Sie wissen wahrscheinlich, dass die verschiedenen Reputationsebenen in Stack Exchange von der Fragenseite / einem Beitrag aus unterschiedlich formatiert sind. Es gibt alle Regeln für die Neuformatierung:
- Wenn ein Benutzer 1 bis 999 (ein bis drei Ziffern) Wiederholungen hat, bleibt er unverändert.
- Wenn ein Benutzer 1000 bis 9999 Wiederholungen (vier Ziffern) hat, erhält er das Komma als Trennzeichen:
9,999
Wenn ein Benutzer 10000 bis 99999 Wiederholungen (fünf Stellen) hat, wird er gekürzt und gerundet. Dh 16741 Wiederholung ist formatiert als
16.7k
, beachten Sie das Punkttrennzeichen im Gegensatz zum Komma für die untere Wiederholung (vorheriger Punkt).16750 wird sich schon ergeben
16.8k
(da dies behoben zu sein scheint )16941 ergibt
16.9k
, 16950 rundet auf17k
, ebenso wie beispielsweise 17014.99941 Runden auf
99.9k
, 99950 Runden auf100k
(das ist etwas, was ich bei der Rundung auf SE eigentlich hasse, weil 100.000 so ein Meilenstein sind und 99950 bei weitem nicht in der Nähe sind).
Wenn ein Benutzer 100000 bis 999999 Mitarbeiter hat, wird dies folgendermaßen gerundet:
100k
100100 runden auf , 100500 runden auf101k
. Die Sache ist, die Rundung wird durchgeführt, aber der Dezimalteil wird entfernt (im Gegensatz zur vierstelligen Wiederholung).100450 rundet auf
100k
, kein Schritt auf 450 bis 500. 100499 auch nicht - es ist immer noch100k
.279843 runden auf
280k
und 399999 runden auf400k
.
Als Eingabe erhalten Sie die unformatierte Reputation und geben sie als formatiert aus.
Sie können prüfen , dass die Eingabe nicht ungültige Nummern / Nicht-Nummern empfangen oder Zahlen mit führenden Nullen, dh 0001234
.
Da Jon Skeet nicht in Kürze 1.000.000 zu erreichen scheint, muss Ihr Code so kurz wie möglich sein, und Sie müssen nicht mehr als eine Million Wiederholungen ausführen (dh keine Sonderfälle für 999500 und höher).
.
einem Dezimalpunkt angezeigt und mit einem Suffixk
; vorbehaltlich der Einschränkung, dass, wenn die dritte signifikante Ziffer0
rechts vom Dezimalpunkt liegt und liegt, der Wert nur auf 2 signifikante Ziffern angezeigt wird. "Die spezifischen Grenzwerte könnten dann in eine einzelne Testliste verschoben werden Fälle am Ende des Beitrags, was für das Einfügen in ein Testframework bequemer ist.Antworten:
Japt,
5048 BytesErster Versuch; Möglicherweise gibt es eine bessere Methode.
Probieren Sie es online!
Wie es funktioniert
quelle
JavaScript (ES6),
76-68ByteEin weiterer erster Versuch. Gott sei Dank für das Handy
.toLocaleString()
, die kürzeste Alternative, die ich finden konnte, ist 21 Bytes länger ...Dies trennt Tausende entweder durch
,
oder.
, abhängig davon, in welchem Land Sie leben. Beifünf oderzwei Bytes mehr können Sie dafür immer ein Komma verwenden:quelle
JavaScript (ES6), 71
@ETHProductions schlagen, während er meinen Hinweis nicht sieht.Er sah es.Prüfung
Prüfung
quelle
ES6,
6862 BytesBearbeiten: 6 Bytes
["1", "001"]
gespeichert, als ich merkte, dass dies zu Zeichenfolgen führt"1,001"
.Bearbeiten: 2 Bytes gespeichert, um den Kommentar von @ Mwr247 zu korrigieren!
quelle
16950
gibt16.9k
statt17k
Python 2.7, 58 Bytes
Ich musste verwenden
(x+.5)
, um mit dem16950->17k
Fall umzugehen ..quelle