Ispirato da questa risposta (enfasi sulla mia):
Faremo una partita. Supponiamo di avere un numero x . Si inizia con x e quindi è possibile aggiungere, sottrarre, moltiplicare o dividere per qualsiasi numero intero, tranne zero. Puoi anche moltiplicare per x . Puoi fare queste cose tutte le volte che vuoi. Se il totale diventa zero, hai vinto.
Ad esempio, supponiamo che x sia 2/3. Moltiplicare per 3, quindi sottrarre 2. Il risultato è zero. Hai vinto!
Supponiamo che x sia 7 ^ (1/3). Moltiplica per x , quindi di nuovo per x , quindi sottrai 7. Hai vinto!
Supponiamo che x sia √2 + √3. Qui non è facile vedere come vincere. Ma si scopre che se si moltiplica per x , si sottrae 10, si moltiplica per x due volte e si aggiunge 1, si vince. (Questo non dovrebbe essere ovvio; puoi provarlo con la tua calcolatrice.)
Ma se inizi con x = π, non puoi vincere. Non è possibile passare da π a 0 se si aggiunge, sottrai, moltiplica o dividi per numeri interi o moltiplica per π, indipendentemente da quanti passi fai. (Anche questo non dovrebbe essere ovvio. È una cosa molto complicata!)
Numeri come √2 + √3 da cui puoi vincere sono chiamati algebrici . Numeri come π con cui non puoi vincere sono chiamati trascendentali.
Perché è interessante? Ogni numero algebrico è correlato aritmeticamente agli interi e le mosse vincenti nel gioco ti mostrano come. Il percorso per zero potrebbe essere lungo e complicato, ma ogni passaggio è semplice e c'è un percorso. Ma i numeri trascendentali sono fondamentalmente diversi: non sono aritmeticamente correlati agli interi tramite semplici passaggi.
In sostanza, utilizzerai i passaggi utilizzati nella domanda sopra citata per "vincere" il gioco per un determinato input.
Data una costante algebrica reale, xconverti il numero in zero usando le seguenti operazioni consentite:
- Aggiungi o Sottrai un numero intero.
- Moltiplica o dividi per un numero intero diverso da zero.
- Moltiplicare per la costante originale
x.
L'input è una stringa che può contenere numeri interi, addizione, sottrazione, moltiplicazione, divisione, esponenziale (la tua scelta di **o ^, esponenti sono usati per rappresentare le radici) e parentesi. Gli spazi nell'input sono opzionali, ma non nell'output. Dovresti emettere i passaggi necessari per ottenere un risultato pari a zero, quindi moltiplicando per 7come un passo verrebbe emesso come *7. È consentito uno spazio finale e / o newline.
Esempi
0 -> +0 (or any other valid, or empty)
5/7 + 42 -> -42 *7 -5 (or shorter: *7 -299)
2^(1/3) -> *x *x -2
5*(3**(1/4)) -> *x *x *x -1875
2^(1/2)+3^(1/2) -> *x -10 *x *x +1
Il codice più corto vince.
x^4-10*x^2+1. Vedi WolframAlpha

0devono essere i risultati? Dati gli errori di arrotondamento e la precisione del galleggiante, ho potuto facilmente vedere situazioni problematiche ...