Étant donné une expression arithmétique, qui peut inclure des parenthèses ( ()
), des exposants ( ^
), une division ( /
) et une multiplication ( *
), une addition ( +
) et une soustraction ( -
) (dans cet ordre de fonctionnement), telles que
a ^ (2 / 3) * 9 * 3 - 4 * 6
sortie la même expression en notation préfixe.
(- (* (* (^ a (/ 2 3)) 9) 3) (* 4 6))
Les espaces sont facultatifs à l'entrée comme à la sortie. Vous pouvez supposer que tous les opérateurs sont associatifs à gauche et que tous les nombres de l'expression sont des entiers à un chiffre (c'est-à-dire [0-9]
).
Il s'agit d'un défi de golf de code, donc la solution la plus courte l'emporte.
3+4-5+6 = (((3+4)-5)+6)
ou((3+4)-(5+6))
?*
et/
ont la même priorité, comme le fait+
amd-
.Réponses:
Rubis 1,9 - 134
Assez mal, mais ça marche:
la source
Python, 222 caractères
Similaire à Ruby, sauf que Python ne vous permet pas de redéfinir les opérations globales, uniquement les opérations d'une classe.
la source
Perl 6 (146 | 150)
La façon la plus simple de procéder consiste à remplacer simplement les sous-programmes qui implémentent les opérateurs par de nouveaux.
Le nombre minimal absolu d'octets pour le faire de cette façon est:
146 octets, bien qu'il soit plus logique de compter les graphèmes en Perl 6.
Cela suppose que « sortir la même expression en notation de préfixe » pourrait simplement faire référence au résultat de l'expression, pas nécessairement à la sortie du programme.
Vous devez ajouter
say
devant l'expression pour que le programme l'imprime sur STDOUT. (150 octets)la source
Unix TMG , 189 octets
La solution est presque directement tirée du manuel de la langue, avec seulement le golf de base.
Étendu:
la source