Você provavelmente sabe que os diferentes níveis de reputação no Stack Exchange são formatados de maneira diferente quando vistos na página de perguntas / uma postagem. Existem todas as regras de formatação de representantes:
- se um usuário tiver de 1 a 999 (um a três dígitos) representante, ele fica como está.
- se um usuário tiver de 1000 a 9999 repetições (quatro dígitos), ele receberá a vírgula como um separador:
9,999
se um usuário tiver 10000 a 99999 repetições (cinco dígitos), ele será reduzido e arredondado. Ou seja, 16741 rep é formatado como
16.7k
, observe o separador de pontos ao contrário da vírgula do representante inferior (ponto anterior).Já resultará 16750
16.8k
(já que isso parece estar corrigido )16941 resulta em
16.9k
, 16950 arredonda para cima17k
, assim como 17014, por exemplo.99941 arredonda para
99.9k
, 99950 arredonda para100k
(isso é algo que eu realmente odeio com o rep-arredondamento no SE, porque 100.000 é um marco e 99950 não está nem perto).
Se um usuário tiver 100000 a 999999 representantes, será arredondado da seguinte maneira:
100100 arredonda para baixo
100k
, 100500 arredonda para cima101k
. O problema é que o arredondamento é feito, mas a parte decimal é removida (ao contrário do representante de quatro dígitos).100450 arredonda para baixo
100k
, nenhum passo para arredondar 450 a 500. Nem 100499 - ainda é100k
.279843 arredonda para cima
280k
e 399999 arredonda para400k
.
Como entrada, você recebe a reputação bruta e a produz como formatada.
Você pode considerar essa entrada não receberá números / não números inválidos ou números com zeros à esquerda, ou seja 0001234
.
Como Jon Skeet não parece chegar a 1.000.000 em breve, seu código deve ser o mais curto possível , não sendo necessário lidar com o representante maior que um milhão (ou seja, sem casos especiais para 999500 e acima).
.
um ponto decimal e com um sufixok
; sujeito à ressalva de que, se o terceiro número significativo estiver0
e estiver à direita do ponto decimal, o valor será exibido apenas em 2 números significativos. "Os pontos de corte específicos podem ser movidos para uma única lista de testes casos no final da postagem, o que é mais conveniente para copiar e colar em uma estrutura de teste.Respostas:
Japt,
5048 bytesPrimeira tentativa; pode haver um método melhor.
Experimente online!
Como funciona
fonte
JavaScript (ES6),
7668 bytesOutra primeira tentativa. Graças a Deus por isso acessível
.toLocaleString()
, a alternativa mais curta que pude encontrar é 21 bytes mais ...Isso separa milhares por um
,
ou.
, dependendo do país em que você vive. Porcincodois bytes a mais, você pode usar sempre uma vírgula:fonte
JavaScript (ES6), 71
Derrotar @ETHProductions enquanto ele não vê minha dica.Ele viu isso.Teste
Teste
fonte
ES6,
6862 bytesEdit: Salvo 6 bytes quando eu percebi que
["1", "001"]
strings to"1,001"
.Editar: salvou 2 bytes para corrigir o comentário de @ Mwr247!
fonte
16950
dá em16.9k
vez de17k
Python 2.7, 58 bytes
Eu tive que usar
(x+.5)
para lidar com o16950->17k
caso ..fonte