Eu estava navegando em esolangs e me deparei com este idioma: https://github.com/catseye/Quylthulg .
Uma coisa interessante sobre essa linguagem é que ela não usa prefixo, postfix ou infix, usa as três , chamando-a de notação "panfix".
Aqui está um exemplo. Para representar infix normais 1+2
em panfix, torna-se: +1+2+
. Observe como o operador está antes, no meio e depois dos operandos. Outro exemplo é (1+2)*3
. Isso se torna *+1+2+*3*
. Observe novamente como *
está em todos os três lugares em relação aos operandos +1+2+
e 3
.
O desafio
Como você deve ter adivinhado, sua tarefa neste desafio é converter uma expressão de infix em panfix.
Alguns esclarecimentos:
- Você só precisa lidar com as quatro operações básicas:
+-*/
- Você não terá que lidar com as versões unárias daquelas, apenas binárias
- Você tem que lidar com parênteses
- Suponha as regras de precedência normais da
*/
época+-
e associe à esquerda para todas elas. - Os números serão números inteiros não negativos
- Opcionalmente, você pode ter espaços na entrada e na saída
Casos de teste
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-*
Isso é código-golfe , então o código mais curto em bytes vence!
S.split``
deve ser[...S]
, embora possa realmente ajudar a combinar/\d+|./g
antecipadamente e trabalhar com isso.