Récemment, j'ai écrit un nouveau langage , pour éviter d'avoir à gérer l' ordre des opérations , j'ai simplement mis correctement entre parenthèses chaque expression pour éviter cela complètement.
Parce que les parenthèses sont aux codes de caractères 40-41, votre code devra être aussi court que possible.
Exemples
1+2*3
(1+(2*3))
2*(3+4)
(2*(3+4))
2*3/4+3
(((2*3)/4)+3)
342*32/8
((342*32)/8)
Règles
Les seules opérations que vous devrez gérer sont: *
(multiplication), /
(division), +
(addition) et -
(soustraction).
- L' ordre des opérations est le suivant:
- Parenthèse
- Multiplication, division
- Adition, soustraction
- Vous devriez préférer aller de gauche à droite
- Les nombres entrés seront toujours des entiers positifs (voir bonus)
Bonus
-20% si vous gérez la négation:
3+-5
(3+(-5))
-5% si vous autorisez le placement d'espaces à l'intérieur de l'entrée:
3 + 4
(3+4)
-10% si vous pouvez gérer les décimales en entrée:
1+.12
(1+.12)
1+0.21/3
(1+(0.21/3))
Bounty 500: si vous parvenez à écrire une réponse dans Sans nom / Blocs
code-golf
arithmetic
balanced-string
Downgoat
la source
la source
1+2+3+4
(dont certaines solutions pourraient être entre parenthèses((1+2)+(3+4))
)Réponses:
Python, 153 * 0,9 = 137,7 octets
Ce programme gère la saisie décimale.
La deuxième ligne commence par un espace, la seconde commence par une tabulation, la troisième avec deux tabulations et la troisième avec un espace. Cela a sauvé un octet. Voici un hexdump (
xxd
pp):Voici un programme que j'ai utilisé pour les tests: (Enregistrez le programme ci-dessus sous
paren.py
)Assurez-vous que votre terminal utilise le
\033[38;5;<COL>m
code d'échappement pour les couleurs.la source
prefer to go left-right
. Essayez le cas de test 3 dans l'OP, votre résultat n'est pas correct. Cela peut être un vrai problème par exemple avec l'arithmétique entière((2*(3/4))+3)
(((2*3)/4)+3)
JavaScript (ES6) 179 (263-20% -5% -10%)
Comme les deux autres réponses sont actuellement erronées, je posterai la mienne. C'est une variante de l'analyseur d'expression que j'ai utilisé ici et ici et ailleurs. Regardez là pour des explications plus détaillées sur l'algorithme.
C'est assez volumineux mais ça devrait marcher.
Extrait de test
la source
Python, 241 * 0,8 * 0,95 * 0,9 = 164,84 caractères
J'utilise la bibliothèque ast (Abstract Syntax Trees) et un dict de remplacement de chaîne homebrew. Le remplacement de la chaîne coûte cher, mais le bonus aide à maintenir le score un peu bas. Peut-être (la pièce de rechange de la chaîne) peut-il être joué plus loin.
Notez que cette solution ajoute un jeu supplémentaire de parenthèses autour de chaque nombre, mais je pense que cela est dans l'esprit de la question
Suite de tests:
Sortie de la suite de tests:
la source
import ast
dans votre code