Bir hamle dizisi, bir Rubik Küpünde bir hamle dizisidir (aşağıya bakınız). Boş hareket dizisinin yanında, küp üzerinde hiçbir etkisi olmayan diğer birçok hareket dizisi vardır. Bu hareket dizilerine kimlik dizileri diyoruz.
Bu kimlik dizilerinin bir kısmının U2 R R' U2
veya olduğu belirlenir U D2 U' D2
. İlki, iki rasgele hamle yapılır U2 R
ve ardından hemen geri alınır R' U2
. İkincisi benzer. İlk iki rasgele hamle U D2
ve daha sonra geri alınmaz, ancak ters sırada yapılır U' D2
. Bu sadece işe yarar, çünkü hareket U
yalnızca üst katmanın D2
parçalarını etkiler ve hareket yalnızca alt katmanın parçalarını etkiler. Bu iki hareket dizisinin görselleştirmesini görebilirsiniz.
Diğer kimlik dizileri hiç açık olmayabilir. Örneğin dizi R' U' R' F' U F U' R' F R F' U' R U2 R
. Oldukça uzun, ama aynı zamanda küp üzerinde hiçbir etkisi yoktur.
Notasyonu Taşı
Bir hareket, küpün altı yüzünden birinin bir katmanının dönüşünü açıklar. Bir hareket, yüzü temsil eden bir harften sonra dönüş açısını temsil eden isteğe bağlı bir sonekten oluşur.
Harfler ve karşılık gelen yüzleri U (Yukarı - yukarı bakan taraf), D (Aşağı - aşağı bakan taraf), R (Sağ - sola bakan taraf ), L (Sol - sola bakan taraf) , F (Ön - size bakan taraf) ve B (Arka - size bakan taraf).
Son ek yoksa, yüz saat yönünde 90 derece, son ek '
aracı, yüz saat yönünün tersine 90 derece ve son ek 2
aracı yüz saat yönünde 90 derece döndürülür.
Bu notasyon ile ilgili herhangi bir probleminiz varsa, sadece bu gibi hareket dizilerini görselleştirebileceğiniz http://alg.cubing.net adresini kullanın .
Meydan okuma
Göreviniz, bir hamle dizisinin bir kimlik olup olmadığını belirleyen bir program yazmaktır.
Tam bir program veya bir fonksiyon yazabilirsiniz. Girdi (STDIN, komut satırı argümanı, bilgi istemi veya işlev argümanı) ve çıkış (dönüş değeri veya STDOUT yoluyla) bir Boolean değeri veya karşılık gelen bir tamsayı (çıkış) olarak bir hareket dizisi içeren (hareketler boşluklarla ayrı) bir dize almalıdır. Doğru - 1 - kimlik sırası / Yanlış - 0 - kimlik sırası değil).
Son ekiniz '
programlama dilinizde sorun yaratırsa, farklı bir simge kullanabilirsiniz, ancak rakam kullanamazsınız. R F2 U3
Müsade edilmez.
Bu kod kodludur, bu nedenle en kısa kod (bayt cinsinden) kazanır.
Test Kılıfları
"" -> True
"U2 R R' U2" -> True
"U D2 U' D2" -> True
"U2 R U2 R'" -> False
"R' U' R' F' U F U' R' F R F' U' R U2 R" -> True
"L'" -> False
"B B2 B' B2" -> True
"D D2 D'" -> False
"R F' D2 U B' F2 B' U2 D2 F2 B2 U F R'" -> True
"D2 U' R2 U F2 D2 U' R2 U' B' L2 R' B' D2 U B2 L' D' R2" -> False
"R U R' U' R' F R2 U' R' U' R U R' F' R2 U R2 U' R2 U' D R2 U' R2 U R2 D'" -> True
"R U R' U' R' F R2 U' R' U' R U R' F' R2 U' R2 U R2 U' D R2 U' R2 U R2 D'" -> False
"B2 F2 U' F2 U R2 F2 U2 B D' R' D' R2 D' F2 U' F U R2 U R B D B D2 L2 D' F2 U D' R' D B R2 D2 F2 R' F2 D2" -> True
"R U2 R' U R' U2 R U2 R U R' U' R' U R U2" -> False
"U F B' R' U F' R U' F' B L U' F L'" -> False
"R2 U' R' U' R U R U R U' R" -> False
"R' F R' B2 R F' R' B2 R2" -> False
U3
, son ekini basitçe bir rakama çevirebilirsin.
R2 D2
.
That is F(orward), B(ackward), L(eft), R(ight), U(p), D(own)
R F2 U3
?