Estaba navegando por esolangs y encontré este idioma: https://github.com/catseye/Quylthulg .
Una cosa interesante sobre este lenguaje, es que no usa prefijo, postfix o infix, usa los tres , llamándolo notación "panfix".
Aquí hay un ejemplo. Para representar infija normales 1+2
en panfix, se convierte en: +1+2+
. Observe cómo el operador está antes, en el medio y después de los operandos. Otro ejemplo es (1+2)*3
. Esto se convierte *+1+2+*3*
. Observe nuevamente cómo *
está en los tres lugares con respecto a los operandos +1+2+
y 3
.
El reto
Como habrás adivinado, tu tarea en este desafío es convertir una expresión de infijo a panfix.
Algunas aclaraciones:
- Solo tiene que lidiar con las cuatro operaciones básicas:
+-*/
- No tendrá que lidiar con las versiones unarias de esas, solo binarias
- Tienes que lidiar con paréntesis
- Asuma las reglas de precedencia normales de
*/
entonces+-
y la asociatividad izquierda para todos ellos. - Los números serán enteros no negativos
- Opcionalmente, puede tener espacios tanto en la entrada como en la salida
Casos de prueba
1+2 -> +1+2+
1+2+3 -> ++1+2++3+
(1+2)*3 -> *+1+2+*3*
10/2*5 -> */10/2/*5*
(5+3)*((9+18)/4-1) -> *+5+3+*-/+9+18+/4/-1-*
Este es el código de golf , por lo que gana el código más corto en bytes
S.split``
debería serlo[...S]
, aunque en realidad puede ayudar hacer coincidir/\d+|./g
por adelantado y trabajar en eso en su lugar.