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 UDRLFBisteğe bağlı olarak son eklerden biri tarafından takip edilen harflerden oluşur '2.
Bu nota Singmaster nota adı verilir. UDRLFB6 yüzden birini temsil eder ve isteğe bağlı sonek '2dö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,FFveBBve benzeri opsiyonel ekleri kullanan tüm bunların kombinasyonlarıU2UveyaU'U'.Bu hareket çiftleri yasaklanmıştır, çünkü kolayca 1 veya 0 harekete düşebilirler.
U2Uaynı etkiye sahiptirU',R'Raynı etkiye.Ardışık üç hamle aynı harf grubundan olmamalıdır. Mektup gruplarıdır
UD,RLveFB. Bu kural ayrıca ardışık hamle yasaklayanUDU,DUD,RLR,LRL,FBF,BFBve benzeri opsiyonel ekleri kullanarak tüm bunların kombinasyonlarıU2DU,RL'RyaB2FB'.Gruplar yüzleri hareket eksenlerine göre sıralar.
UveDaynı grup içindedir, çünkü her ikisi de aynı ekseni etrafında döndürür. Dolayısıyla birUhareketDyüzün parçalarını etkilemez ve birDhareketUyüzün parçalarını etkilemez . Bu nedenle, iki hareket değiştirilebiliyor,UDUaynı etkiye sahipUUDve 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 2da 'soneki kullanıldığında boşluk yazdırılamaz . Yazdırabilmek zorunda L2UR2F'R'U2ya L2 U R2 F' R' U2. L2U R2F'R'U2Müsade edilmez.
L2U R2F'R'U2. Uisteğ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 2izin yok mu? izinU R2verilmelidir , bence, hareketler arasındaki boşluklar anlamlı olduğu için.