移動シーケンスは、ルービックキューブ上の移動(ターン)のシーケンスです(表記については、下をご覧ください)。空の移動シーケンスのほかに、他の多くの移動シーケンスがあり、キューブにはまったく影響しません。これらの移動シーケンスをIDシーケンスと呼びます。
これらのIDシーケンスの一部は、U2 R R' U2
またはなどのように決定するのが明らかU D2 U' D2
です。最初のものでは、2つのランダムな動きが行われU2 R
、その後すぐに元に戻されR' U2
ます。2番目は似ています。最初の2つのランダムな動きU D2
とその後は元に戻されますが、順序は逆U' D2
です。これは機能します。移動U
は上層のD2
部分のみに影響し、移動は下層の部分のみに影響するためです。これら2つの移動シーケンスの視覚化を見ることができます。
他の同一性シーケンスはまったく明らかではないかもしれません。たとえば、シーケンスR' U' R' F' U F U' R' F R F' U' R U2 R
。かなり長いですが、キューブにはまったく効果がありません。
移動記法
移動は、立方体の6つの面のうちの1つの1つのレイヤーの回転を表します。動きは、顔を表す1文字と、それに続く回転角度を表すオプションの接尾辞で構成されます。
文字とそれに対応する面は、U(上-上を向く面)、D(下-下を向く面)、R(右-右を向く面)、L(左-左を向く面)です。 、F(正面-あなたに面する側面)およびB(背面-あなたから離れる面)。
接尾辞がない場合、顔は時計回りに90度回転し、接尾辞'
は顔が反時計回りに90度回転し、接尾辞は顔が2
時計回りに180度回転します。
表記に問題がある場合は、http://alg.cubing.netを使用するだけで、そのような移動シーケンスを視覚化できます。
チャレンジ
あなたの仕事はプログラムを書くことで、それは移動シーケンスがアイデンティティかどうかを決定します。
完全なプログラムまたは関数を作成できます。入力として(STDIN、コマンドライン引数、プロンプト、または関数引数を介して)移動シーケンス(移動はスペースで区切られます)を含む文字列を受け取り、ブール値または対応する整数(戻り値またはSTDOUTを介して)を出力する必要があります( True-1-IDシーケンス/ False-0-IDシーケンスではありません)。
接尾辞'
がプログラミング言語で問題を引き起こす場合は、数字ではなく別の記号を使用できます。R F2 U3
許可されていません。
これはcodegolfであるため、最短のコード(バイト単位)が優先されます。
テストケース
"" -> 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
、接尾辞を数字にキャストするよりも簡単です。
R2 D2
。
That is F(orward), B(ackward), L(eft), R(ight), U(p), D(own)
R F2 U3
ですか?