Perkalian antara 2 bilangan bulat dapat direduksi menjadi serangkaian tambahan seperti itu
3 * 5 = 3 + 3 + 3 + 3 + 3 = 5 + 5 + 5
Eksponensial (menaikkan a ke daya b ) juga dapat dikurangi menjadi serangkaian perkalian:
5 ^ 3 = 5 * 5 * 5
Oleh karena itu, eksponensial dapat direduksi menjadi serangkaian penambahan, dengan membuat ekspresi multiplikasi, kemudian menjadi serangkaian penambahan. Misalnya, 5 ^ 3
(5 potong dadu) dapat ditulis ulang sebagai
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
Tugas Anda adalah, mengingat ekspresi yang ditambahkan bersama-sama yang terdiri dari eksponensial, perkalian, dan penambahan, kurangi menjadi serangkaian penambahan terpendek. Ekspresi "terpendek" didefinisikan sebagai ekspresi dengan jumlah +
simbol paling sedikit , masih menggunakan hanya satu dari dua angka dalam ekspresi asli. Misalnya, ekspresi terpendek 10 * 2
adalah 10 + 10
.
Angka-angka yang terlibat dalam input semuanya akan bilangan bulat positif, dan ekspresi hanya terdiri dari +
(penambahan), *
(perkalian) dan ^
(eksponensial), bersama dengan bilangan bulat dan tanda kurung ( ()
) untuk menunjukkan prioritas.
Output harus terdiri dari bilangan bulat positif dan +
simbol saja. Anda seharusnya tidak mengeluarkan langkah-langkah individual dari pengurangan, hanya hasil akhir. Output mungkin tidak terdiri dari angka yang tidak muncul di input. Namun, Anda dapat menggunakan 3 simbol berbeda, bukan +*^
, tapi tolong katakan simbol apa itu
Ruang-ruang yang memisahkan input dan output mungkin atau tidak dapat digunakan dalam program Anda, yaitu 3 * 5
dapat dikeluarkan sebagai salah satu 5 + 5 + 5
atau 5+5+5
.
Perhatikan bahwa dalam kebanyakan kasus, penambahan sebenarnya tidak dilakukan. Satu-satunya kasus di mana penambahan harus dilakukan adalah ketika Anda memiliki sesuatu seperti 5 ^ (1 + 2)
, dalam hal ini, penambahan diperlukan untuk melanjutkan -> 5 ^ 3 -> 5 * 5 * 5 -> ...
. Lihat test case # 4.
Kode Anda tidak perlu menangani input yang sampai pada ekspresi yang ambigu. Misalnya (2 + 2) * (4 + 1)
,. Karena aturan yang ditetapkan sejauh ini, tujuannya bukan untuk menghitung jawabannya, tujuannya adalah untuk menyederhanakan penambahan. Jadi hasilnya bisa berbeda tergantung pada urutan bahwa ekspresi diselesaikan atau diringankan (penambahan mana yang disederhanakan, yang harus ditinggalkan?). Contoh valid lain: ((3 + 2) ^ 2) ^ 3 -> ((3 + 2) * (3 + 2)) ^ 3 -> ???
.
Ini adalah kode-golf sehingga kode terpendek menang
Uji kasus
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.
tetapi ekspresi asli dapat memiliki lebih dari dua angka. Saya tidak mengerti mengapa 8 + 8
ini bukan keluaran yang valid untuk 2 ^ 1 + 2 ^ 1 + 2 ^ 2 + 8 ^ 1
. Pertanyaan ini masih belum jelas bagi saya.
**
bukan^
?