Vous savez probablement que les différents niveaux de réputation sur Stack Exchange sont formatés différemment lorsqu'ils sont vus à partir de la page de questions / d'un article. Il y a toutes les règles de formatage des représentants:
- si un utilisateur a 1 à 999 (un à trois chiffres) représentant, il est laissé tel quel.
- si un utilisateur a entre 1 000 et 9 999 répétitions (quatre chiffres), il reçoit la virgule comme séparateur:
9,999
si un utilisateur dispose de 10000 à 99999 rep (cinq chiffres), il est raccourci et arrondi. C'est-à-dire, 16741 rep est formaté comme
16.7k
, notez le séparateur de points contrairement à la virgule pour le représentant inférieur (point précédent).16750 résultera déjà
16.8k
(puisque cela semble être corrigé )16941 donne 16950
16.9k
arrondis à17k
, ainsi que 17014, par exemple.99941 arrondit à
99.9k
, 99950 arrondit à100k
(c'est quelque chose que je déteste en fait avec l'arrondi de répétition sur SE, car 100 000 est un tel jalon et 99950 est loin d'être le cas).
Si un utilisateur a 100000 à 999999 représentants, il est arrondi de cette façon:
100100
100k
arrondis à , 100500 arrondis à101k
. Le fait est que l'arrondi est fait, mais la partie décimale est supprimée (contrairement au représentant à quatre chiffres).100450 arrondit à
100k
, pas de pas pour arrondir 450 à 500. 100499 non plus - c'est toujours100k
.279843 arrondit à
280k
et 399999 arrondit à400k
.
En entrée, vous obtenez la réputation brute et la sortez sous forme formatée.
Vous pouvez considérer que l'entrée ne recevra pas de nombres / non-nombres invalides, ou des nombres avec des zéros en tête, c'est-à-dire 0001234
.
Parce que Jon Skeet ne semble pas atteindre 1 000 000 bientôt, votre code doit être aussi court que possible, vous n'avez pas besoin de gérer le représentant supérieur à un million (c'est-à-dire pas de cas particuliers pour 999500 et plus).
.
une virgule décimale. et avec un suffixek
; sous réserve que si le troisième chiffre significatif est0
et se trouve à droite de la virgule décimale, la valeur ne s'affiche que sur 2 chiffres significatifs. "Les seuils spécifiques pourraient alors être déplacés vers une seule liste de tests cas à la fin de la publication, ce qui est plus pratique pour le copier-coller dans un cadre de test.Réponses:
Japt,
5048 octetsPremier essai; il peut y avoir une meilleure méthode.
Essayez-le en ligne!
Comment ça fonctionne
la source
JavaScript (ES6),
7668 octetsEncore une première tentative. Dieu merci pour cette pratique
.toLocaleString()
, l'alternative la plus courte que j'ai pu trouver est 21 octets de plus ...Cela sépare des milliers par
,
ou.
, selon le pays dans lequel vous vivez. Pourcinqdeux octets de plus, vous pouvez toujours utiliser une virgule:la source
JavaScript (ES6), 71
Battre @ETHProductions alors qu'il ne voit pas mon indice.Il l'a vu.Tester
Tester
la source
ES6,
6862 octetsEdit: sauvé 6 octets quand je me suis rendu compte que se
["1", "001"]
stringifiait"1,001"
.Edit: enregistré 2 octets pour corriger le commentaire de @ Mwr247!
la source
16950
donne16.9k
au lieu de17k
Python 2.7, 58 octets
Je devais utiliser
(x+.5)
pour faire face à l'16950->17k
affaire ..la source