Послідовність руху - це послідовність рухів (поворотів) на кубі Рубіка (для позначення дивіться нижче). Поруч із порожньою послідовністю переміщення є багато інших послідовностей переміщення, які взагалі не впливають на куб. Ми називаємо ці ідентичні послідовності переміщення послідовностями.
Деякі з цих послідовностей ідентичності очевидно визначити, як U2 R R' U2
або U D2 U' D2
. У першому робиться два випадкові рухи, U2 R
а потім негайно скасовується R' U2
. Другий подібний. Перші два випадкові ходи, U D2
а потім вони скасовуються, але у зворотному порядку U' D2
. Це працює лише тому, що переміщення U
впливає лише на шматочки верхнього шару, а переміщення D2
впливає лише на частини нижнього шару. Ви можете побачити візуалізацію цих двох послідовностей руху.
Інші ідентичності послідовностей можуть бути зовсім не очевидними. Наприклад, послідовність R' U' R' F' U F U' R' F R F' U' R U2 R
. Він досить довгий, але також зовсім не впливає на куб.
Позначення переміщення
Хід описує поворот одного шару однієї з шести граней куба. Рух складається з однієї літери, що представляє обличчя, а потім необов'язковий суфікс, що представляє кут повороту.
Букви та їх відповідні грані - U (вгору - сторона, звернена вгору), D (вниз - сторона, спрямована вниз), R (праворуч - сторона, спрямована вправо), L (зліва - сторона, звернена вліво) , F (спереду - сторона, звернена до вас), і B (спина - сторона, спрямована від вас).
Якщо суфікса немає, обличчя повернене на 90 градусів за годинниковою стрілкою, суфікс '
означає, обличчя повернене на 90 градусів проти годинникової стрілки, а суфікс 2
означає, що обличчя повернуто на 180 градусів за годинниковою стрілкою.
У вас є проблеми з позначеннями, просто використовуйте http://alg.cubing.net , де ви можете візуалізувати такі послідовності переміщення.
Змагання
Ваше завдання - написати програму, яка визначає, чи є послідовності переміщення ідентичністю чи ні.
Ви можете написати повну програму або функцію. Він повинен отримувати рядок, що містить послідовність переміщення (ходи розділені пробілами) як вхід (через STDIN, аргумент командного рядка, аргумент підказки або функції), а вихід (через значення повернення або STDOUT) булеве значення або відповідне ціле число ( Правда - 1 - послідовність ідентичності / Неправильно - 0 - не послідовність ідентичності).
Якщо суфікс '
створює проблеми в мові програмування, ви можете використовувати інший символ, але не в цифрі. 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
?