Hari ini di kelas statistik saya, saya menemukan bahwa beberapa faktorial dapat disederhanakan ketika dikalikan bersama! Sebagai contoh:5! * 3! = 5! *3*2 = 5! *6 = 6!
Pekerjaan Anda:
Diberikan string yang hanya berisi angka-angka Arab dan tanda seru, sederhanakan faktorial saya ke string sesingkat mungkin, dengan jumlah byte terkecil untuk bahasa Anda, gaya kode golf.
Memasukkan
String yang hanya berisi angka Arab dan tanda seru. Faktorial untuk input tidak akan lebih besar dari 200 !. Faktorial tidak akan memiliki lebih dari satu faktorial per angka. Input dapat diambil sebagai daftar bilangan bulat.
Keluaran
String yang mungkin diperpendek, yang memiliki nilai setara pada input. Pesanan tidak penting. Notasi faktorial adalah suatu keharusan, tetapi Anda tidak diharuskan untuk menggunakan lebih dari satu simbol faktorial per angka.
Uji kasus
In: 3!2!2!
Out: 4!
In 2!3!2!0!
Out: 4!
In: 7!2!2!7!2!2!2!2!
Out: 8!8!
In: 23!3!2!2!
Out: 24!
Also: 4!!
In: 23!3!2!2!2!
Out: 24!2!
In: 127!2!2!2!2!2!2!2!
Out: 128!
In: 32!56!29!128!
Out: 29!32!56!128!
Semoga berhasil
1!1!
saja string kosong?Jawaban:
Jelly ,
1718 byteTautan monadik yang mengambil dan mengembalikan daftar angka (menempel pada opsi satu faktorial per nomor)
Cobalah online!
Bagaimana?
Versi Pietu1998 versi pegolf (walaupun ditulis secara independen).
sumber
Jelly , 19 byte
Cobalah online!
Cepat dan kotor. Sangat lambat, bahkan
23!2!3!2!
test case adalah peregangan. I / O sebagai daftar bilangan bulat.Penjelasan
sumber
Bersih ,
397... 317 byteCobalah online!
Ini mengambil
[Int]
, menentukan faktor utama dari hasil, dan mengurangi faktor untuk menemukan representasi terkecil, menggunakan faktor terbesar pada setiap tahap sebagai nilai dasar untuk istilah faktorial berikutnya. Ini tidak akan menyelesaikan beberapa kasus uji pada TIO, tetapi ini cukup * cepat, dan dapat menjalankan semuanya dalam waktu kurang dari 3 menit pada laptop kelas menengah.* untuk
O((prod(N)!)^sum(N))
algoritme kompleksitassumber
> <> , 66 byte
Cobalah online!
Tidak efisien, tidak menemukan string terkecil, dan interpreter tidak berurusan dengan baik dengan jumlah yang sangat besar. Tetapi setidaknya saya mencoba? Mengambil input sebagai daftar angka melalui
-v
flag.Pertama, ia menghitung nilai input dengan memfaktorkan setiap angka dan mengalikannya. Kemudian ia menemukan faktorial terbesar yang terbagi dengan bersih menjadi total dan menghasilkannya. Ulangi sampai mendapat prime, (yang dikeluarkan) atau 1 dan keluar dari program. Karena itu, kadang-kadang tidak menemukan representasi nomor terpendek, misalnya, test case
7!2!2!7!2!2!2!2!
kembali,10!224
bukan8!8!
karena menemukan total dapat dibagi oleh 10! pertama.sumber
Ruby ,
240 237233 byteIni sangat tidak efisien
Menerima array int sebagai input
Mengembalikan string dan memilih opsi terpendek antara, katakan
'720!'
,,'6!!'
dan'3!!!'
Cobalah online!
sumber