Dada una expresión aritmética, que puede incluir paréntesis ( ()
), exponentes ( ^
), división ( /
) y multiplicación ( *
), suma ( +
) y resta ( -
) (en ese orden de operación), como
a ^ (2 / 3) * 9 * 3 - 4 * 6
genera la misma expresión en notación de prefijo.
(- (* (* (^ a (/ 2 3)) 9) 3) (* 4 6))
Los espacios son opcionales tanto en la entrada como en la salida. Puede suponer que todos los operadores son asociativos a la izquierda y que todos los números en la expresión son enteros de un solo dígito (es decir [0-9]
).
Este es un desafío de código de golf, por lo que gana la solución más corta.
3+4-5+6 = (((3+4)-5)+6)
o((3+4)-(5+6))
?*
y/
tienen la misma precedencia, como lo hacen+
amd-
.Respuestas:
Ruby 1.9 - 134
Bastante malvado, pero funciona:
fuente
Python, 222 caracteres
Similar al Ruby, excepto que Python no te permite redefinir las operaciones globales, solo las operaciones de una clase.
fuente
Perl 6 (146 | 150)
La forma más fácil de hacer esto es cambiar las subrutinas que implementan los operadores por otras nuevas.
La cantidad mínima absoluta de bytes para hacerlo de esta manera es:
146 bytes, aunque tiene más sentido contar grafemas en Perl 6.
Esto supone que " generar la misma expresión en notación de prefijo " podría referirse simplemente al resultado de la expresión, no necesariamente a la salida del programa.
Tendría que agregar
say
delante de la expresión para que el programa la imprima en STDOUT. (150 bytes)fuente
Unix TMG , 189 bytes
La solución es casi directa del manual para el idioma, con solo golf básico.
Expandido:
fuente