2 tamsayı arasındaki çarpma, bu şekilde bir dizi ilaca indirgenebilir
3 * 5 = 3 + 3 + 3 + 3 + 3 = 5 + 5 + 5
Üs (yükselterek bir güç için b da çarpma bir dizi halinde azaltılabilir):
5 ^ 3 = 5 * 5 * 5
Bu nedenle, üs alma işlemi, bir çarpma ifadesi yaratılarak, daha sonra bir dizi ilaveler haline getirilerek bir dizi ilavelere indirgenebilir. Örneğin, 5 ^ 3
(5 küp) şu şekilde yeniden yazılabilir:
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
Senin görevin, üs, çarpma ve toplamadan oluşan ifadeler bir araya getirildiğinde, onu en kısa eklemeler serisine indirgemek. "En kısa" ifade, +
orijinal ifadedeki iki sayıdan yalnızca birini kullanan , en az sayıda simgeye sahip ifade olarak tanımlanır . Örneğin, kısa sentezleme 10 * 2
olup 10 + 10
.
Girdide yer alan sayıların tümü pozitif tamsayılar olacaktır ve ifade, önceliği belirtmek için tamsayılar ve köşeli parantezler ( ) ile birlikte yalnızca +
(toplama), *
(çarpma) ve ^
(üs alma) 'dan oluşacaktır ()
.
Çıktı +
yalnızca pozitif tamsayılardan ve sembollerden oluşmalıdır . İndirimlerin bireysel adımlarını değil, yalnızca nihai çıktıyı çıkarmalısınız. Çıkış, girişte görünmeyen hiçbir sayıdan oluşmayabilir. Ancak, bunun yerine 3 farklı simge kullanabilirsiniz +*^
, ancak lütfen hangi sembollerin olduğunu söyleyin
Girdileri ve çıktıları ayıran boşluklar programlarınızda kullanılabilir ya da kullanılmayabilir, yani 3 * 5
ya 5 + 5 + 5
ya çıktı olarak alınabilir 5+5+5
.
Çoğu durumda, toplama işleminin gerçekten yapılmadığını unutmayın. Toplamanın gerçekleştirileceği tek durum, böyle bir şeye sahip olduğunuz zamandır 5 ^ (1 + 2)
, bu durumda toplamaya devam etmek gerekir -> 5 ^ 3 -> 5 * 5 * 5 -> ...
. Bkz. Test örneği # 4.
Kodunuzun belirsiz bir ifadeye ulaşan girdileri işlemesi gerekmez. Örneğin (2 + 2) * (4 + 1)
,. Şimdiye kadar ortaya konan kurallar nedeniyle, amaç cevabı hesaplamak değil, amaç eklemeler için basitleştirmektir. Dolayısıyla, ifadelerin çözülme veya değiştirilme sırasına bağlı olarak sonuç farklı olabilir (basitleştirmek için hangi eklemeler, hangileri bırakılacak?). Başka geçersiz örnek: ((3 + 2) ^ 2) ^ 3 -> ((3 + 2) * (3 + 2)) ^ 3 -> ???
.
Bu kod golf, bu yüzden en kısa kod kazanır
Test senaryoları
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.
ancak orijinal ifadede ikiden fazla sayı olabilir. Neden 8 + 8
geçerli bir çıktı değil anlamıyorum 2 ^ 1 + 2 ^ 1 + 2 ^ 2 + 8 ^ 1
. Bu soru benim için hala belirsiz.
**
Bunun yerine kullanabilir miyiz^
?