Tugas Anda adalah membuat urutan gerakan secara acak, yang dapat digunakan untuk mengacak Rubik's Cube. Perebutan seperti itu terdiri dari 25 gerakan. Setiap gerakan terdiri dari huruf-huruf yang UDRLFB
secara opsional diikuti oleh salah satu sufiks '2
.
Notasi ini disebut notasi Singmaster. UDRLFB
mewakili salah satu dari 6 wajah dan akhiran opsional '2
mewakili sudut belok. Informasi ini sama sekali tidak diperlukan untuk menyelesaikan tugas.
Untuk memastikan, bahwa perebutan adalah 'berkualitas baik', dua aturan berikut harus diterapkan:
Dua gerakan berurutan tidak boleh memiliki huruf yang sama. Ini melarang bergerak berturut-turut
UU
,DD
,RR
,LL
,FF
danBB
dan semua kombinasi mereka menggunakan akhiran opsional sepertiU2U
atauU'U'
.Pasangan bergerak ini dilarang, karena mereka dapat dengan mudah dikurangi menjadi 1 atau 0 bergerak.
U2U
memiliki efek yang sama denganU'
,R'R
efek yang sama dengan.
Tiga gerakan berurutan tidak boleh dari grup surat yang sama. Grup surat adalah
UD
,RL
danFB
. Aturan ini juga melarang bergerak berturut-turutUDU
,DUD
,RLR
,LRL
,FBF
,BFB
dan semua kombinasi mereka menggunakan akhiran opsional sepertiU2DU
,RL'R
atauB2FB'
.Kelompok-kelompok mengurutkan wajah berdasarkan sumbu gerak mereka.
U
danD
berada dalam kelompok yang sama, karena keduanya berbalik pada poros yang sama. Karena itu sebuahU
gerakan tidak memengaruhi bagian-bagianD
wajah, dan sebuahD
gerakan tidak memengaruhi bagian-bagianU
wajah. Oleh karena itu kedua gerakan dapat dipertukarkan,UDU
memiliki efek yang sama denganUUD
, dan ini dapat dikurangi menjadiU2D
.
Tantangan
Tulis skrip atau fungsi, yang menghasilkan satu perebutan acak. Tidak ada input. Script / fungsi harus mencetak 25 gerakan tanpa pemisahan atau dipisahkan oleh satu spasi atau mengembalikan string koresponden.
Program Anda harus dapat membuat setiap perebutan tunggal, yang memenuhi aturan di atas. Tentu saja dengan asumsi, bahwa generator angka acak adalah benar-benar acak, dan bukan pseudo acak.
Ini adalah kode-golf. Kode terpendek (dihitung dalam byte ) menang.
Contoh output:
Memanggil script / fungsi 3 kali harus mencetak / mengembalikan sesuatu seperti:
R'B2R2F2R2FB'R2DR2ULFB2RB'U2B'FL'BR'U'RB'
U'DBR'B2U'B'U'RUF'B'RDR2U'B'LR'B'F2D2UF2L'
BR2F'B'R'D'R'U2B'F2D2R'F2D'F'D2R2B'L2R'UB'R2L'D
Jika Anda memisahkan gerakan dengan spasi masing-masing:
R2 L' F2 U2 D' R2 L2 F L' D2 U R B D' U2 L B2 L U B2 D U2 R' D2 U'
B R D2 F U2 B' R2 F2 B' U' L' R2 B U2 R' D B' F' U2 R' B' L R D2 R2
B2 R2 U D' B R D' R L2 D2 L2 R B2 F U' F2 B2 U' F U' D F R2 U2 B'
Perhatikan, bahwa semua output ini terdiri dari 25 gerakan, tetapi memiliki panjang yang berbeda, karena sufiks opsional. Tidak diperbolehkan mencetak spasi, saat salah satu 2
atau '
sedang digunakan sebagai sufiks. Anda harus mencetak L2UR2F'R'U2
atau L2 U R2 F' R' U2
. L2U R2F'R'U2
tidak diizinkan.
L2U R2F'R'U2
. U
tidak memiliki akhiran opsional dan karenanya tidak boleh memiliki spasi. Ruang tidak boleh menjadi pengganti untuk akhiran opsional.
U F2 L D2 R'...
, misalnya? Dalam hal ini, tidak ada ruang ekstra , yang menurut saya harusnya oke menurut aturan Anda.
UR 2
tidak diizinkan?U R2
harus diizinkan, saya pikir, karena ruang antar gerakan masuk akal.