Dada uma expressão aritmética, que pode incluir parênteses ( ()
), expoentes ( ^
), divisão ( /
) e multiplicação ( *
), adição ( +
) e subtração ( -
) (nessa ordem de operação), como
a ^ (2 / 3) * 9 * 3 - 4 * 6
produz a mesma expressão na notação de prefixo.
(- (* (* (^ a (/ 2 3)) 9) 3) (* 4 6))
Os espaços são opcionais na entrada e na saída. Você pode assumir que todos os operadores são associativos à esquerda e que todos os números na expressão são números inteiros de um dígito (ou seja [0-9]
).
Este é um desafio de código de golfe, portanto, a solução mais curta vence.
3+4-5+6 = (((3+4)-5)+6)
Ou seja, é ou((3+4)-(5+6))
?*
e/
têm a mesma precedência, assim como+
amd-
.Respostas:
Rubi 1.9 - 134
Muito mal, mas funciona:
fonte
Python, 222 caracteres
Semelhante ao Ruby, exceto que o Python não permite redefinir as operações globais, apenas operações de uma classe.
fonte
Perl 6 (146 | 150)
A maneira mais fácil de fazer isso é trocar as sub-rotinas que implementam os operadores por novas.
A quantidade mínima absoluta de bytes para fazer isso dessa maneira é:
146 bytes, embora faça mais sentido contar grafemas no Perl 6.
Isso pressupõe que "a saída da mesma expressão na notação de prefixo " poderia apenas se referir ao resultado da expressão, não necessariamente à saída do programa.
Você precisaria adicionar
say
na frente da expressão para obter o programa para imprimi-lo em STDOUT. (150 bytes)fonte
TMG Unix , 189 bytes
A solução é quase direta do manual para o idioma, apenas com o golfe básico.
Expandido:
fonte