Crea un programma che risolva un'espressione matematica usando gli elementi dai lati alternati dell'espressione. Il modo in cui è fatto è, invece di leggere da sinistra a destra, leggi il primo carattere, poi l'ultimo, poi il secondo, quindi il secondo all'ultimo, ecc. Questo ti darà una nuova espressione che devi valutare e produrre.
a*b/c+d-e
135798642 <-- Order you read the expression in
ae*-bd/+c <-- Order of operation.
Esempio:
1*3/2+4-5
15*-34/+2 = -255
Se l'espressione non "funziona", è 1
necessario inserire un nelle posizioni necessarie per farlo funzionare.
Alcuni esempi probabilmente lo illustreranno meglio:
Input: 1+1+1+1+1
Result: 23 // Because 1+1+1+1+1 -> 11++11++1 -> 23
Input: 1+2-3+12-5
Result: -19 // Because 1+2-3+12-5 -> 15+-22-13+ -> 15+-22-13+1 -> -19
// |
// Not valid expression
Input: 2*2*2*2*2
Result: 968 // Because 2*2*2*2*2 -> 22**22**2 -> 22*1*22*1*2 -> 968
// || ||
// Not valid, 1 must be inserted
Input: 17/2
Output: 127 // Because 17/2 = 127/ -> 127/1 -> 127
Gli operatori che devono essere supportati sono + - * /
. Non ci saranno parentesi. Vengono utilizzate le normali regole matematiche e la "sintassi", quindi ad esempio **
non significa esponenziazione. a++++1
è equivalente a a+1
(cioè stile MATLAB, non C ++).
In caso di dubbi, alcune operazioni valide sono:
-a
+a
a++b
a+-b
a*-b
a*+b
a*++b
a/b
a/-b
a/+b
-a/--b
Mentre tutto quanto segue non è valido. Viene mostrato con cosa dovrebbero essere sostituiti con:
a+ | a+1
a- | a-1
a++++ | a++++1 (This is equivalent to a+1)
a*+++ | a*+++1 (This is equivalent to a*1)
a**b | a*1*b
a*/b | a*1/b
a/*b | a/1*b
a* | a*1
*a | 1*a
***a | 1*1*1*a
Regole:
- Il codice può essere una funzione o un programma completo
- L'input può essere STDIN o argomento della funzione
- L'input deve essere un'espressione matematica valida, senza virgolette
''
o""
. - L'output dovrebbe essere la risposta alla nuova espressione, come numero intero, decimale o frazione semplificata.
- Devono essere supportate almeno tre cifre dopo il punto decimale. Quindi
1/3 = 0.333
no0.33
.0.333333333
è accettato. ans = ...
è accettato.- Sono accettate nuove linee guida e nuove linee e spazi.
- L'input sarà solo numeri interi
- La divisione per zero può causare un errore, NaN, Inf ecc. L'emissione di un numero non è accettata.
Come sempre, vince il codice più breve in byte. Verrà selezionato un vincitore una settimana dal giorno in cui è stata pubblicata la sfida. Le risposte postate in seguito potrebbero comunque vincere se è più breve dell'attuale leader.
0/0
se l'espressione passa alla divisione intera o al modulo per zero?
x/0
è un output valido. Finché non genera una risposta errata, va bene. Errore e "Non un numero" è per definizione corretto, e l'infinito è "abbastanza corretto",
2^64
quando dovrebbe andare oltre?