Le défi
Vous êtes le propriétaire d'un service incroyable appelé Coyote Beta , qui répond comme par magie aux questions mathématiques que ses utilisateurs lui envoient sur Internet.
Mais il s'avère que la bande passante coûte cher. Vous avez deux choix, soit créer un " Coyote Beta Pro" ou trouver un moyen de résoudre ce problème. Tout récemment, quelqu'un a demandé (x + 2)
. Le client n'a-t-il pas pu envoyerx+2
et l'utilisateur ne verrait aucune différence?
La tâche
Votre tâche consiste à «réduire» les expressions mathématiques. Étant donné une expression d'entrée, vous devez vous débarrasser des espaces et des parenthèses jusqu'à ce qu'elle donne une représentation minimale de la même entrée. Les parenthèses autour des opérations associatives n'ont pas besoin d'être conservées.
Les seuls opérateurs donnés ici sont +
, -
, *
, /
et^
(exponentiation), avec associativité mathématique standard et priorité. Les seuls espaces fournis dans l'entrée seront des caractères d'espace réels.
Exemple d'entrée / sortie
Input | Output
------------|--------------
(2+x) + 3 | 2+x+3
((4+5))*x | (4+5)*x
z^(x+42) | z^(x+42)
x - ((y)+2) | x-(y+2)
(z - y) - x | z-y-x
x^(y^2) | x^y^2
x^2 / z | x^2/z
- (x + 5)+3 | -(x+5)+3
Notation
L'entrée / sortie peut utiliser n'importe quelle méthode préférée. Le plus petit programme en octets gagne.
Bits exacts
L'exponentiation est associative à droite et suit également la priorité mathématique standard (étant la plus élevée). Un littéral numérique valide est /[0-9]+/
, et un littéral de variable valide est /[a-z]+/
. Un littéral de variable unique représente une valeur unique même lorsque sa longueur de caractère est supérieure à 1.
Ce que l'on entend par «les parenthèses autour des opérations associatives n'ont pas besoin d'être conservées» est que la sortie doit consister en une expression qui aboutit à un arbre d'analyse identique, à l'exception que les opérations associatives peuvent être réorganisées.
/[a-z]+/
, cela signifie que la multiplication par juxtaposition commeab
est interdite?2+(3+4)
être changé pour2+3+4
, non? Cela change l'arbre d'analyse.x^(y/2)=x^y/2
; exponentiation a une priorité d'ordre supérieur, ergo,x^y/2=(x^y)/2
.Prompt X:expr(X)
en TI-BASIC mais vous ne pouvez pas simplifier :(Réponses:
C #,
523519504 octetsVérifiez les commentaires dans le code pour voir comment cela fonctionne!
Golfé
Non golfé
Notes annexes
PS: Si vous avez une astuce ou avez trouvé un bug, faites-le moi savoir dans les commentaires et j'essaierai de le corriger (je vais ensuite ajouter une note sur le bug avec votre nom;))
la source
C ++, 284 octets
Golfé
Non golfé
la source