Trình tự di chuyển là một chuỗi các bước di chuyển (lượt) trên khối Rubik (đối với ký hiệu nhìn xuống bên dưới). Bên cạnh chuỗi di chuyển trống, còn có nhiều chuỗi di chuyển khác, hoàn toàn không ảnh hưởng đến khối lập phương. Chúng tôi gọi những chuỗi di chuyển trình tự nhận dạng.
Một số trình tự nhận dạng này là rõ ràng để xác định, thích U2 R R' U2
hoặc U D2 U' D2
. Trong lần đầu tiên, hai động tác ngẫu nhiên được thực hiện U2 R
và sau đó ngay lập tức hoàn tác R' U2
. Cái thứ hai cũng tương tự. Hai bước đầu ngẫu nhiên U D2
và sau đó chúng được hoàn tác, nhưng theo thứ tự đảo ngược U' D2
. Điều này chỉ hoạt động, bởi vì các U
hiệu ứng di chuyển chỉ các phần của lớp trên và di chuyển D2
chỉ có tác dụng các phần của lớp dưới. Bạn có thể thấy một hình dung của hai chuỗi di chuyển này.
Trình tự nhận dạng khác có thể không rõ ràng ở tất cả. Ví dụ trình tự R' U' R' F' U F U' R' F R F' U' R U2 R
. Nó khá dài, nhưng cũng không có tác dụng gì cả.
Di chuyển ký hiệu
Một động thái mô tả lần lượt một lớp của một trong sáu mặt của khối lập phương. Một di chuyển bao gồm một chữ cái đại diện cho khuôn mặt theo sau là một hậu tố tùy chọn đại diện cho góc quay.
Các chữ cái và các mặt tương ứng của chúng là U (Lên - mặt hướng lên trên), D (Xuống - mặt hướng xuống dưới), R (Phải - mặt quay sang phải), L (Trái - mặt phải sang trái) , F (Mặt trước - mặt đối diện với bạn) và B (Mặt sau - mặt hướng ra xa bạn).
Nếu không có hậu tố, mặt được quay 90 độ theo chiều kim đồng hồ, hậu tố '
có nghĩa là, mặt được quay 90 độ ngược chiều kim đồng hồ và hậu tố 2
có nghĩa là, mặt được quay 180 độ theo chiều kim đồng hồ.
Bạn có bất kỳ vấn đề nào với ký hiệu này, chỉ cần sử dụng http://ache.cubing.net , nơi bạn có thể hình dung các chuỗi di chuyển như vậy.
Các thách thức
Nhiệm vụ của bạn là viết một chương trình, xác định xem một chuỗi di chuyển có phải là danh tính hay không.
Bạn có thể viết một chương trình đầy đủ hoặc một chức năng. Nó sẽ nhận được một chuỗi chứa chuỗi di chuyển (di chuyển được phân tách bằng dấu cách) làm đầu vào (thông qua STDIN, đối số dòng lệnh, đối số nhắc hoặc hàm) và đầu ra (thông qua giá trị trả về hoặc STDOUT) một giá trị Boolean hoặc một số nguyên tương ứng ( Đúng - 1 - chuỗi nhận dạng / Sai - 0 - không phải chuỗi nhận dạng).
Nếu hậu tố của bạn '
tạo ra các vấn đề trong ngôn ngữ lập trình của bạn, bạn có thể sử dụng một ký hiệu khác, nhưng không phải là chữ số. R F2 U3
không được đồng ý.
Đây là codegolf, do đó mã ngắn nhất (tính bằng byte) sẽ thắng.
Các trường hợp thử nghiệm
"" -> 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
, hơn bạn có thể đơn giản chuyển hậu tố thành một chữ số.
R2 D2
.
That is F(orward), B(ackward), L(eft), R(ight), U(p), D(own)
R F2 U3
vậy?