O desafio
Você é o proprietário de um serviço incrível chamado Coyote Beta , que responde magicamente às questões matemáticas que seus usuários enviam pela Internet.
Mas acontece que a largura de banda é cara. Você tem duas opções: criar um " Coyote Beta Pro" ou encontrar uma maneira de resolver isso. Recentemente, alguém consultou (x + 2)
. O cliente não pôde enviar x+2
e o usuário não viu diferença?
A tarefa
Sua tarefa é "minificar" expressões matemáticas. Dada uma expressão de entrada, você deve se livrar de espaços em branco e parênteses até que ela forneça uma representação mínima da mesma entrada. Os parênteses em torno das operações associativas não precisam ser preservados.
Os únicos operadores dadas aqui são +
, -
, *
, /
, e ^
(exponenciação), com associatividade matemática padrão e precedência. O único espaço em branco fornecido na entrada serão caracteres de espaço reais.
Entrada / Saída de Amostra
Input | Output
------------|--------------
(2+x) + 3 | 2+x+3
((4+5))*x | (4+5)*x
z^(x+42) | z^(x+42)
x - ((y)+2) | x-(y+2)
(z - y) - x | z-y-x
x^(y^2) | x^y^2
x^2 / z | x^2/z
- (x + 5)+3 | -(x+5)+3
Pontuação
A entrada / saída pode usar qualquer método preferido. O menor programa em bytes vence.
Bits exatos
A exponenciação é associativa correta e também segue a precedência matemática padrão (sendo a mais alta). Um literal numérico válido é /[0-9]+/
e uma variável variável é literal /[a-z]+/
. Uma única variável literal representa um valor único, mesmo quando o tamanho do caractere for maior que 1.
O que se entende por "os parênteses em torno das operações associativas não precisam ser preservados" é que a saída deve consistir em uma expressão que resulta em uma árvore de análise idêntica, com a exceção de que as operações associativas podem ser reorganizadas.
/[a-z]+/
, isso significa multiplicação por justaposição comoab
não é permitido?2+(3+4)
ser alterado para2+3+4
, certo? Isso muda a árvore de análise.x^(y/2)=x^y/2
; exponenciação tem uma precedência de ordem superiorx^y/2=(x^y)/2
,.Prompt X:expr(X)
em TI-BASIC, mas você não pode simplificar :(Respostas:
C #,
523519504 bytesVerifique os comentários no código para ver como funciona!
Golfe
Ungolfed
Notas laterais
PS: Se você tiver uma dica ou encontrou um bug, informe-me nos comentários e tentarei corrigi-lo (acrescentarei uma nota sobre a correção do bug com seu nome;))
fonte
C ++, 284 bytes
Golfe
Ungolfed
fonte