Vous travaillez pour une entreprise qui souhaite créer une calculatrice conviviale, et vous avez donc été chargé d'ajouter la possibilité pour les utilisateurs d'utiliser des "raccourcis numériques", c'est-à-dire des lettres qui représentent des valeurs numériques, comme kpour 1000. Parce que votre entreprise souhaite économiser de l'argent sur le stockage dans ces calculatrices, vous devez minimiser votre code autant que possible pour réduire le coût du stockage.
Ta tâche
Vous devez créer une fonction qui lit une expression en entrée de STDIN ou la prend comme paramètre et renvoie son évaluation ou l'imprime dans STDOUT.
Quelques clarifications
Permettez-moi de faire quelques définitions. Tout d'abord, nous avons l'entrée, que j'appelle une expression. Cela peut ressembler à ceci:
x + y / z
Au sein de cette expression , nous avons trois chiffres: x, yet z, séparés par les opérateurs ( +et /). Ces nombres ne sont pas nécessairement des entiers positifs (ni même des entiers). Ce qui complique les choses, c'est quand nous devons évaluer les raccourcis contenus dans les chiffres. Par exemple, avec
2k15
à des fins d'évaluation, nous avons divisé ce en trois chiffres: 2, 1000(qui est k), et 15. Ensuite, selon les règles, nous les combinons pour obtenir
2*1000 + 15 = 2015
Espérons que cela facilite un peu la compréhension des règles suivantes.
Règles
NB Sauf indication contraire, vous pouvez interpréter le mot "nombres" ou ses synonymes pour inclure des raccourcis.
Ce qui suit constitue la sténographies numérique votre fonction doit être capable de traiter:
k, m, b, t, and e.k, m, b, and tcorrespondent1000, 1000000, 1000000000, and 1000000000000respectivement aux valeurs (mille, un million, un milliard et un billion). Laesténographie sera toujours suivie d'un autre nombren,, et représente10^n. Vous devez permettre aux raccourcis numériques d'être présentsnet présents avante. Par exemple,kekévalue à1000*10^1000.Par souci de simplicité, si un nombre contient la sténographie
e, il ne sera utilisé qu'une seule fois.Tout nombre ( raccourcis inclus ) avant qu'un raccourci soit multiplié par celui-ci. par exemple
120kkserait évalué comme120 * 1000 * 1000. S'il n'y a pas de nombre avant, vous devez supposer que le nombre est 1 (comme la façon dont vous pourriez, en mathématiques, traiterximplicitement une variable comme1x). par exemple,e10évalue10^10. Autre exemple:2m2kévalue à2*1000000*2*1000(rien n'y est ajouté).Tout numéro (les raccourcis ne s'appliquent pas) suivant le dernier raccourci d'un numéro contenant un raccourci y est ajouté. par exemple
2k12serait évalué comme2*1000 + 12. L'exception à cette règle est si le raccourcieest utilisé, auquel cas le nombre ( raccourcis inclus ) suivantesera traiténet évalué comme10^n(voir la première règle).Votre fonction doit être capable de traiter les opérateurs
+, -, *, and /qui sont respectivement l'addition, la soustraction, la multiplication et la division. Il peut en traiter davantage, si vous le souhaitez.Les opérations sont évaluées selon l' ordre des opérations.
Les nombres en sténographie ne sont pas uniquement des entiers.
3.5b1.2est valide et doit être évalué comme3.5*1000000000 + 1.2 = 3500000001.2Les fonctions intégrées ne sont pas autorisées, si elles existent pour ce genre de chose. L'exception que j'ajouterai serait si votre langue convertit automatiquement les grands nombres en notation scientifique, auquel cas cela est admissible pour votre sortie.
Le code le plus court en octets gagne, les failles standard s'appliquent.
Contribution
L'entrée sera une expression avec chaque nombre et opérateur séparés par des espaces. Les nombres peuvent contenir ou non un raccourci. Un exemple est présenté ci-dessous:
10 + 1b - 2k
Production
Votre fonction doit générer l'évaluation de l'expression sous forme de nombre. Il est admissible d'utiliser la notation scientifique si la sortie est trop grande pour être affichée. Vous devez avoir au moins trois décimales si le nombre n'est pas un entier. Il est admissible si vous conservez ces décimales si le nombre est un entier.
Cas de test
Contribution
t
Production
1000000000000
Contribution
1 + 4b / 10k11
Production
399561.483
Contribution
e2 + k2ke-1 - b12
Production
-999799912
ou
-999799912.000
Contribution
142ek12
Production
142e1012
ou
142.000e1012
Contribution:
1.2m5.25
Production:
1200005.25
Notes finales
C'est mon premier défi publié (avec l'aide des utilisateurs sur le bac à sable). Si quelque chose n'est pas clair, faites-le moi savoir et je ferai de mon mieux pour clarifier.
1000 + 2000 * 10 ^ -1, mais cela a donné une réponse finale de -999998712. (De plus, mon interprétation ne semble pas concorder avec le " dernier raccourci " de la règle 4 , mais je ne sais pas comment comprendre la séquence autrement k2k.) Pouvez-vous expliquer les étapes de son évaluation?
2m2kdevrait être ajouté à la discussion de la règle 3. En outre, il pourrait être préférable d'utiliser un terme différent - peut-être "entier" - pour les nombres littéraux comme 123celui-ci ne sont pas des raccourcis. Le mot «nombre» a environ 3 définitions différentes ici, tel qu'il se présente actuellement.