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+2
e 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 ab
non è 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 :(