Introduction:
Comme Twitter et Instagram et d'autres, je voulais afficher des nombres comme 1.2K
et 3.8 M
au lieu de 1,222
ou 3,823,456
.
Mais ce n'est pas tout! Comme nous le savons tous, il pourrait y avoir des êtres humains qui sans aucun doute n'aimeront pas ces abréviations et essaieront de les inverser. Alors, 1.2k
deviendra 1,200
et 3.8 M
deviendra 3,800,000
.
La tâche:
- votre tâche consiste à écrire un programme ou une fonction qui convertit une liste de nombres ( qui sont donnés sous forme de chaînes ) en leurs paires abrégées et vice-versa.
Par exemple, si la liste d'entrées (ou n'importe quelle autre STDIN
) l'était ['1.4k', '1,234,567', '7.99M']
, alors vous devriez sortir:
['1,400', '1.2M', '7,990,000']
Vous pouvez suivre le schéma suivant pour les abréviations:
- 10 3 -> un kilo -> K
- 10 6 -> un million -> M
- 10 9 -> un milliard -> B
Votre code peut prendre en minuscules, en majuscules, en majuscules ou en minuscules pour l'entrée et utiliser n'importe lequel de ces éléments pour la sortie, mais il doit être cohérent.
Règles et restrictions:
- vous pouvez écrire un programme ou une fonction, en prenant l'entrée via
STDIN
(ou l'alternative la plus proche), l'argument de ligne de commande ou l'argument de la fonction et en sortant le résultat viaSTDOUT
(ou l'alternative la plus proche), la valeur de retour de la fonction ou le paramètre de la fonction (out). - l'entrée peut être dans n'importe quel format de liste ou de chaîne. Vous pouvez supposer que le sont inférieurs à chacun et que la liste contient au moins un élément.
ai
231
- chaque numéro abrégé n'en contiendra qu'un seul
.
tandis qu'un numéro normal en contiendra autant,
que nécessaire (vous pouvez supposer que ce nombre ne sera pas modifié). - vous NE POUVEZ PAS entrer un nombre
'123456'
mais plutôt123,456
- les règles de code-golf standard s'appliquent.
Cas de test:
Input: ['1.5M', '77.6k', '123,456,789'] Output: ['1,500,000', '77,600', '123.4M']
Input: ['3,000,000,000', '581k', '2b'] Output: ['3B', '581,000', '2,000,000,000']
Input: ['0.1k'] Output: ['100']
Input: ['888', '33'] Output: ['0.888k', '0.033k']
Clarifications:
- pour les nombres <1000 après la virgule décimale dans la sortie des abréviations, vous devez avoir autant de chiffres que nécessaire pour obtenir le résultat correct. (par exemple:
2
-> deviendra0.002k
) - cela signifie 3 décimales au maximum ; pour les nombres> 1000, vous pouvez avoir au maximum 1 décimale . - l'abréviation peut être en minuscule ou en majuscule
- J'ai supprimé la restriction intégrée comme suggéré dans les commentaires
Le code le plus court en octets gagne!
'123,456,789' -> '123.4M'
? De plus, cela ne précise pas le nombre de décimales à utiliser. De toute façon, tout ce qui est inférieur à 1000 ne devrait pas être abrégé.["k", "M", "G"]
. Que signifie "alors qu'un nombre normal en contiendra autant que nécessaire ", dans mon pays, ce serait une erreur d'en utiliser.Réponses:
PHP,
234224213201205 octets6 octets enregistrés par insertusername ici, 4 octets inspirés par cela.
-r
-2 octets si le trait de soulignement comme séparateur est correct: remplacer
" "
par_
.-1 octet si l'arrondi correct est correct: remplacer
($y*10|0)/10
parround($y,1)
.-17 octets pour PHP 7.1: remplacer
substr($x,strlen($x)-1)
par$x[-1]
.80 (63) octets pour développer un seul argument:
enregistrer dans un fichier, puis exécuter (ou remplacer
<?=
parecho
+ espace et exécuter avec-r
.la source
for($j=1;$x=$argv[$j++];)
- au lieu deforeach($argv as$i=>$x)if($i)
kmb[$i]
- au lieu de"kmb"[$i]
.JavaScript,
545524522518514508504498494214 octetsMerci à @ETHproductions pour avoir économisé 180 octets!
Pour appeler la fonction:
Sorties comme
alert
, où chacunealert
contient un élément différent de l'entréeVersion lisible:
Résumé des modifications: fonction convertie en fonction flèche
var
|0
au lieu du plancher.reverse().join''
la source