La sfida
Sei il proprietario di un fantastico servizio chiamato Coyote Beta , che risponde magicamente alle domande di matematica che gli utenti gli inviano su Internet.
Ma si scopre che la larghezza di banda è costosa. Hai due scelte, o creare un " Coyote Beta Pro" o trovare un modo per risolverlo. Proprio di recente, qualcuno ha interrogato (x + 2). Il client non è in grado di inviare x+2e l'utente non vedrebbe alcuna differenza?
L'obiettivo
Il tuo compito è "minimizzare" le espressioni matematiche. Data un'espressione di input, è necessario sbarazzarsi di spazi bianchi e parentesi fino a quando non fornisce una rappresentazione minima dello stesso input. Non è necessario conservare le parentesi attorno alle operazioni associative.
Gli unici operatori qui riportati sono +, -, *, /, e ^(elevamento a potenza), con standard di associatività matematica e la precedenza. L'unico spazio bianco indicato nell'input sarà lo spazio reale dei caratteri.
Ingresso / uscita campione
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
punteggio
Input / output può utilizzare qualsiasi metodo preferito. Vince il programma più piccolo in byte.
Bit esatti
L'esponenziazione è associativa corretta e segue anche la precedenza matematica standard (essendo la più alta). Un letterale numerico valido è /[0-9]+/e un letterale variabile valido è /[a-z]+/. Un letterale a singola variabile rappresenta un singolo valore anche quando la lunghezza del carattere è maggiore di 1.
Ciò che si intende per "non è necessario conservare le parentesi attorno alle operazioni associative" è che l'output dovrebbe consistere in un'espressione che si traduce in un albero di analisi identico, con l'eccezione che le operazioni associative possono essere riorganizzate.
/[a-z]+/, ciò significa che la moltiplicazione per giustapposizione come abnon è consentita?
2+(3+4)essere cambiato in 2+3+4, giusto? Questo cambia l'albero di analisi.
x^(y/2)=x^y/2; elevamento a potenza ha una precedenza ordine superiore, ergo, x^y/2=(x^y)/2.
Prompt X:expr(X)in TI-BASIC ma non puoi semplificare :(