Göreviniz bir Rubik Küpünü karıştırmak için kullanılabilecek rastgele bir hamle dizisi oluşturmaktır. Böyle bir karışma tam 25 hamleden oluşur. Her hareket UDRLFB
isteğe bağlı olarak son eklerden biri tarafından takip edilen harflerden oluşur '2
.
Bu nota Singmaster nota adı verilir. UDRLFB
6 yüzden birini temsil eder ve isteğe bağlı sonek '2
dönme açısını temsil eder. Bu bilgi, görevi çözmek için hiçbir şekilde gerekli değildir.
Mücadelelerin 'iyi kalitede' olduğundan emin olmak için, aşağıdaki iki kural uygulanmalıdır:
İki ardışık hamle aynı harfe sahip olmamalıdır. Bu ardışık hamle yasaklayan
UU
,DD
,RR
,LL
,FF
veBB
ve benzeri opsiyonel ekleri kullanan tüm bunların kombinasyonlarıU2U
veyaU'U'
.Bu hareket çiftleri yasaklanmıştır, çünkü kolayca 1 veya 0 harekete düşebilirler.
U2U
aynı etkiye sahiptirU'
,R'R
aynı etkiye.
Ardışık üç hamle aynı harf grubundan olmamalıdır. Mektup gruplarıdır
UD
,RL
veFB
. Bu kural ayrıca ardışık hamle yasaklayanUDU
,DUD
,RLR
,LRL
,FBF
,BFB
ve benzeri opsiyonel ekleri kullanarak tüm bunların kombinasyonlarıU2DU
,RL'R
yaB2FB'
.Gruplar yüzleri hareket eksenlerine göre sıralar.
U
veD
aynı grup içindedir, çünkü her ikisi de aynı ekseni etrafında döndürür. Dolayısıyla birU
hareketD
yüzün parçalarını etkilemez ve birD
hareketU
yüzün parçalarını etkilemez . Bu nedenle, iki hareket değiştirilebiliyor,UDU
aynı etkiye sahipUUD
ve bu azaltılabiliyorU2D
.
Meydan okuma
Bir rastgele karıştırmak üreten bir script veya fonksiyon yazın. Giriş yok. Komut / işlev, 25 hareketi, ayırmadan veya bir boşlukla ayırarak yazdırmak veya karşılık gelen dizeyi döndürmek zorundadır.
Programınız, yukarıdaki kuralları karşılayan her bir karışıklığı yaratabilmek zorundadır. Tabii ki, rastgele sayı üretecinin gerçek rastgele olduğunu ve sahte rastgele olmadığını varsayarsak.
Bu kod golfü. En kısa kod ( bayt cinsinden sayılan ) kazanır.
Örnek çıktılar:
Komut dosyası / işlevi 3 kez çağırmak, şöyle bir şey yazdırmalı / döndürmelidir:
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
Hareketleri her biri bir boşlukla ayırırsanız:
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'
Tüm bu çıktıların isteğe bağlı ekler nedeniyle 25 hareketten oluştuğunu, ancak farklı uzunlukları bulunduğunu unutmayın. Sonuncusu olarak ya 2
da '
soneki kullanıldığında boşluk yazdırılamaz . Yazdırabilmek zorunda L2UR2F'R'U2
ya L2 U R2 F' R' U2
. L2U R2F'R'U2
Müsade edilmez.
L2U R2F'R'U2
. U
isteğe bağlı bir sonek yok ve bu nedenle bir boşluk olmamalıdır. Bir boşluk, isteğe bağlı sonek için bir yedek olmamalıdır.
U F2 L D2 R'...
Mesela çıktı alabilir miyiz ? Bu durumda, kuralınıza göre iyi olması gerektiğini düşündüğüm fazladan bir boşluk yok.
UR 2
izin yok mu? izinU R2
verilmelidir , bence, hareketler arasındaki boşluklar anlamlı olduğu için.