introduzione
Arriva un punto nell'infanzia quando pensi di aver imparato ad aggiungere e moltiplicare, poi qualcuno arriva e ti informa che:
a * b + c = (a * b) + c! = a * (b + c),
e che non era un processo semplice o lineare come ti era stato insegnato in precedenza. Si impara che esiste qualcosa chiamato l' ordine delle operazioni . Questo è un modo molto importante per mantenere un certo livello di coerenza ed espressione, senza che le parentesi si frappongano.
Trama generica
Un giorno ti svegli al suono del panico nelle strade. Un gruppo estremista sotto il nome di " The 2560 " (abbreviazione di "Organizzazione contro l'ordine delle operazioni", con una strana svolta esadecimale) hanno usato i loro metodi malvagi per prendere il controllo di tutte le armi nucleari del mondo. Stanno tenendo in ostaggio l'intero pianeta e hanno una semplice richiesta: invertire l'ordine accettato delle operazioni o affrontare l'eradicazione (le parentesi devono mantenere la loro priorità). Il nuovo sistema si chiama PSADME (parentesi, sottrazione / addizione, divisione / moltiplicazione, esponenti) e le espressioni valutano da destra a sinistra:
a - b - c = a - (b - c) = a + c - b
I giorni passano e la transizione è in corso. Mentre matematici e fisici sono tutti impegnati a riscrivere le loro equazioni, gli informatici devono affrontare il compito di cambiare il modo in cui le espressioni matematiche vengono interpretate dai computer. Fai parte di un gruppo segreto di programmazione ribelle che mira a provocare tanto tormento per i nuovi signori globali - e, per caso, sei selezionato casualmente da The 2560 e incaricato di produrre il programma di calcolo di riferimento.
La tua missione
Scrivi un programma (o una funzione) che prende come input un'espressione matematica (numerica), calcola l'espressione usando PSADME come ordine delle operazioni e genera il risultato. Le espressioni dovrebbero essere valutate da destra a sinistra, quindi
Per semplicità, tutti i numeri forniti saranno numeri interi e i calcoli produrranno risultati interi.
Regole e punteggio
- Il programma dovrebbe accettare input con una lunghezza massima di 128 caratteri - se la tua lingua / piattaforma ha una lunghezza di input massima inferiore, questa è una scusa accettabile.
- Sono vietate le scappatoie standard.
- Il codice vincente sarà scelto il 18 novembre (4 settimane da questa data di pubblicazione).
- Sentiti libero di inserire un codice che non sarebbe considerato degno di golf. Si tratta di divertimento. Se hai un modo interessante di farlo ma non riesci a giocare da solo (o per natura del tuo metodo), puoi pubblicarlo comunque.
Come al solito, il codice vincente è quello con il minor numero di byte, con alcuni bonus di valore di intrattenimento:
- -5 per evitare qualsiasi uso dei caratteri nell'espressione fornita: + , - , ( , ) , ^ , * , /
- -5 per eseguire i calcoli richiedono più di 5 minuti (ma non più di 10 minuti) per il calcolo su un computer standard, senza che il metodo sia ovvio (utilizzando l'orologio o i loop non necessari); Lo scopo è convincere i nuovi signori che non stai cercando di interrompere i loro calcoli di sventura.
- - (5 + N) per un messaggio offensivo diretto (di lunghezza N, escluso lo spazio bianco iniziale / finale) sui membri di The 2560 da scrivere in bella vista all'interno del codice, con alcune ridicole spiegazioni sul perché debba essere Là. Se viene rimosso, il codice non deve funzionare correttamente. Sì, punti gratuiti per valore di intrattenimento.
Esempi e spiegazioni
[program] 2 - 2 - 2
2
2 - (2 - 2) = 2
[program] (2 + 2 * 3 + 3) / 3 + 3
4
(4 * 6) / (3 + 3) = 4
[program] 3 + 2 + 1 ^ 3
216
(3 + 2 + 1) ^ 3 = 216
[program] -5^2
25
(-5) ^ 2 = 25
[program] 32 / 8 * 3 - 1
2
32 / (8 * (3 - 1)) = 32/16 = 2
P(SA)(DM)E.
1 - 3 + 4 = 1 - 7? Da destra a sinistra lo suggerirei, ma questo sta mettendo l'aggiunta davanti alla sottrazione, contrariamente a PSADME, no?