La moltiplicazione tra 2 numeri interi può essere ridotta in una serie di aggiunte in questo modo
3 * 5 = 3 + 3 + 3 + 3 + 3 = 5 + 5 + 5
Elevamento a potenza (sollevando un alla potenza b ) può anche essere ridotta in una serie di moltiplicazioni:
5 ^ 3 = 5 * 5 * 5
Pertanto, l'espiazione può essere ridotta in una serie di aggiunte, creando un'espressione di moltiplicazione, quindi in una serie di aggiunte. Ad esempio, 5 ^ 3
(5 cubi) può essere riscritto come
5 ^ 3 = 5 * 5 * 5
= (5 + 5 + 5 + 5 + 5) * 5
= (5 + 5 + 5 + 5 + 5) + (5 + 5 + 5 + 5 + 5) + (5 + 5 + 5 + 5 + 5) + (5 + 5 + 5 + 5 + 5) + (5 + 5 + 5 + 5 + 5)
= 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5
Il tuo compito è, dato che le espressioni sommate costituite da esponenziazione, moltiplicazione e addizione, riducono la serie alle aggiunte più brevi. L'espressione "più breve" è definita come l'espressione con il minor numero di +
simboli, usando ancora solo uno dei due numeri nell'espressione originale. Ad esempio, l'espressione più breve di 10 * 2
è 10 + 10
.
I numeri coinvolti nell'input saranno numeri interi positivi e l'espressione sarà composta solo da +
(addizione), *
(moltiplicazione) e ^
(esponenziazione), insieme a numeri interi e parentesi ( ()
) per indicare la precedenza.
L'output deve essere composto solo da numeri interi e +
simboli positivi . Non dovresti produrre i singoli passaggi delle riduzioni, ma solo l'output finale. L'output potrebbe non essere costituito da numeri che non compaiono nell'input. Tuttavia, è possibile utilizzare qualsiasi 3 simboli distinti invece di +*^
, ma si prega di dire quali simboli sono
Gli spazi che separano gli ingressi e le uscite possono o non possono essere utilizzati nei programmi, ovvero 3 * 5
possono essere emessi come uno 5 + 5 + 5
o 5+5+5
.
Si noti che nella maggior parte dei casi l'addizione non viene effettivamente eseguita. L'unico caso in cui l'addizione deve essere eseguita è quando hai qualcosa di simile 5 ^ (1 + 2)
, nel qual caso l'addizione è necessaria per continuare -> 5 ^ 3 -> 5 * 5 * 5 -> ...
. Vedi il caso di test n. 4.
Il codice non deve gestire input che arrivano a un'espressione ambigua. Ad esempio (2 + 2) * (4 + 1)
,. A causa delle regole stabilite finora, l'obiettivo non è calcolare la risposta, l'obiettivo è semplificare le aggiunte. Quindi il risultato potrebbe essere diverso a seconda dell'ordine in cui le espressioni vengono risolte o commutate (quali aggiunte semplificare, quali lasciare?). Un altro esempio valido: ((3 + 2) ^ 2) ^ 3 -> ((3 + 2) * (3 + 2)) ^ 3 -> ???
.
Questo è code-golf, quindi vince il codice più breve
Casi test
Input => output
5 ^ 3 + 4 * 1 ^ 5 => 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 4
2 ^ 1 * 2 + 3 + 9 => 2 + 2 + 3 + 9
2 ^ 1 * (2 + 3) + 9 => 2 + 3 + 2 + 3 + 9
2 ^ (1 * (2 + 3)) + 9 => 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 9
10 + 3 * 2 + 33 ^ 2 => 10 + 3 + 3 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33
100 * 3 => 100 + 100 + 100
2 ^ 1 + 2 ^ 1 + 2 ^ 2 + 8 ^ 1 => 2 + 2 + 2 + 2 + 8
(1 + 2 + 5 * 8 + 2 ^ 4) * 2 => 1 + 2 + 8 + 8 + 8 + 8 + 8 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 1 + 2 + 8 + 8 + 8 + 8 + 8 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2
using only one of the two numbers in the original expression.
ma l'espressione originale può avere più di due numeri. Non capisco perché 8 + 8
non sia un output valido per 2 ^ 1 + 2 ^ 1 + 2 ^ 2 + 8 ^ 1
. Questa domanda non è ancora abbastanza chiara per me.
**
invece di^
?