Pengantar:
Kubus Rubik 3x3x3 memiliki kemungkinan permutasi, yaitu sekitar 43 triliun . Anda mungkin pernah mendengar tentang nomor ini sebelumnya, tetapi bagaimana cara menghitungnya?
Kubus Rubik 3x3x3 memiliki enam sisi, masing-masing dengan sembilan stiker. Melihat pada potongan (eksternal) alih-alih stiker, kami memiliki enam bagian tengah; potongan delapan sudut; dan dua belas potongan tepi. Karena pusat tidak dapat dipindahkan, kami dapat mengabaikannya dalam perhitungan. Adapun sudut dan tepi:
- Ada( ) cara untuk mengatur delapan sudut. Setiap sudut memiliki tiga kemungkinan orientasi, walaupun hanya tujuh (dari delapan) yang dapat diorientasikan secara independen; orientasi sudut delapan / final tergantung pada tujuh sebelumnya, diberikan ( ) kemungkinan.
- Ada ( ) cara untuk mengatur dua belas tepi. Dibelah dua dariadalah karena ujung harus selalu dalam permutasi genap persis ketika sudut-sudutnya. Sebelas tepi dapat dibalik secara independen, dengan flip kedua belas / tepi akhir tergantung pada sebelas sebelumnya, diberikan ( ) kemungkinan.
Menyatukan ini, kami memiliki rumus berikut:
Sumber: Wikipedia - Permutasi Kubus Rubik
Meskipun ini mungkin sudah terlihat cukup kompleks, itu masih agak lurus ke depan untuk 3x3x3 Cube. Bahkan untuk kubus rumusnya sedikit berbeda; ini adalah rumus untuk Cube 4x4x4 misalnya:
Yaitu sekitar 7,40 quattuordecillion pada skala pendek .
Dan untuk NxNxN Cubes yang lebih besar (yaitu Rekor Dunia 33x33x33 saat ini) formula akan diperpanjang sedikit. Untuk tidak membuat pengantar ini terlalu lama, saya meletakkan tautan ini di sini, di mana permutasi dari 4x4x4 Cube dan beberapa NxNxN Cubes berukuran lain dijelaskan dengan rumus yang dihasilkan:
Anda mungkin bertanya-tanya sekarang: apakah ada rumus umum berdasarkan untuk setiap x x Cube? Pasti ada. Berikut adalah tiga algoritma yang sangat berbeda, semuanya memberikan hasil yang sama persis berdasarkan :
1: Formula Chris Hardwick:
2: Formula trigonometri Christopher Mowla:
3: Formula dasar Christopher Mowla:
di mana adalah .
Sumber: Cubers-reddit - Rumus Penghitungan Matematika dari Jumlah Posisi, Nomor Tuhan, dll.
Tantangan:
Pilih dan terapkan salah satu dari tiga rumus ini (atau turunan Anda sendiri), yang diberi bilangan bulat input dalam kisaran , menghasilkan hasil yang benar.
Aturan tantangan:
- Anda bebas menggunakan formula lain di samping ketiganya, tetapi perlu diingat bahwa ketiganya terbukti benar. Jika Anda menggunakan formula lain, silakan tambahkan tautan dari mana Anda mendapatkannya (atau jika Anda datang sendiri, tambahkan penjelasan mendalam). Dan saya akan memeriksa semua bilangan bulat dalam kisaran jika outputnya benar. Mungkin inspirasi dapat ditemukan di oeis untuk urutan ini: A075152 .
- Jika bahasa Anda secara otomatis menampilkan keluaran ilmiah (yaitu alih-alih angka setelah rumus 4x4x4) ini diperbolehkan. Tetapi tolong tambahkan kode tambahan untuk jawaban Anda untuk mengonversi pembulatan ilmiah ini menjadi keluaran yang tepat sehingga hasilnya dapat diverifikasi, karena kesalahan pembulatan karena presisi titik mengambang selama pelaksanaan rumus dalam kode Anda tidak diperbolehkan - hasil yang sebenarnya harus tepat.
- Program / fungsi Anda harus benar untuk setidaknya input dalam kisaran (walaupun, karena sudah menghasilkan angka yang sangat besar, lebih besar mungkin akan bekerja juga jika Anda dapat menampilkan ini satu dengan benar).
- Anda tidak diizinkan untuk mengulang semua permutasi yang mungkin dengan penghitung, karena itu tidak akan pernah menghasilkan apa pun dalam jumlah waktu yang wajar. Hanya penerapan formula (salah satu dari tiga yang disediakan, turunan dari salah satu dari itu, atau formula yang sama sekali baru), atau metode lain yang akan memberikan hasil yang benar dalam jumlah waktu yang wajar (tanpa tentu saja hard-coding tentu saja ) Diperbolehkan. Saya berpikir tentang menambahkan waktu terbatas untuk memberlakukan ini, tapi saya pribadi menentang waktu terbatas dalam kombinasi dengan kode-golf , jadi saya tidak akan melakukannya. Tetap saja, pastikan program Anda memberikan jawaban, dan jika terlalu lambat untuk TIO karena alasan tertentu, tambahkan beberapa tangkapan layar dengan output dari mesin lokal Anda sebagai verifikasi.
Aturan umum:
- Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang.
Jangan biarkan bahasa kode-golf mencegah Anda memposting jawaban dengan bahasa yang bukan kode. Cobalah untuk memberikan jawaban sesingkat mungkin untuk bahasa pemrograman 'apa saja'. - Aturan standar berlaku untuk jawaban Anda dengan aturan I / O default , sehingga Anda diizinkan untuk menggunakan STDIN / STDOUT, fungsi / metode dengan parameter yang tepat dan tipe pengembalian, program penuh. Panggilanmu.
- Celah default tidak diperbolehkan.
- Jika memungkinkan, silakan tambahkan tautan dengan tes untuk kode Anda (yaitu TIO ).
- Juga, menambahkan penjelasan untuk jawaban Anda sangat dianjurkan.
Kasus uji:
Di sini kasus uji untuk dalam kisaran (jangan ragu untuk menggunakan tautan WolframAlpha di atas untuk kasus uji yang lebih besar):
n=2
3674160
n=3
43252003274489856000
n=4
7401196841564901869874093974498574336000000000
n=5
282870942277741856536180333107150328293127731985672134721536000000000000000
n=6
157152858401024063281013959519483771508510790313968742344694684829502629887168573442107637760000000000000000000000000
n=7
19500551183731307835329126754019748794904992692043434567152132912323232706135469180065278712755853360682328551719137311299993600000000000000000000000000000000000
n=8
35173780923109452777509592367006557398539936328978098352427605879843998663990903628634874024098344287402504043608416113016679717941937308041012307368528117622006727311360000000000000000000000000000000000000000000000000
n=9
14170392390542612915246393916889970752732946384514830589276833655387444667609821068034079045039617216635075219765012566330942990302517903971787699783519265329288048603083134861573075573092224082416866010882486829056000000000000000000000000000000000000000000000000000000000000000
n=10
82983598512782362708769381780036344745129162094677382883567691311764021348095163778336143207042993152056079271030423741110902768732457008486832096777758106509177169197894747758859723340177608764906985646389382047319811227549112086753524742719830990076805422479380054016000000000000000000000000000000000000000000000000000000000000000000000000000000000
CATATAN: Karena ini adalah tantangan kode-golf , pada dasarnya bermuara pada: mengimplementasikan salah satu dari tiga rumus ini (atau turunan / metode Anda sendiri yang masih menghasilkan hasil yang benar) sesingkat mungkin.
floor