Nhiệm vụ của bạn là tạo ra một chuỗi các bước di chuyển ngẫu nhiên, có thể được sử dụng để tranh giành khối Rubik. Một cuộc tranh giành như vậy được tạo thành từ chính xác 25 di chuyển. Mỗi di chuyển bao gồm các chữ cái UDRLFB
tùy ý theo sau là một trong các hậu tố '2
.
Ký hiệu này được gọi là ký hiệu Singmaster. UDRLFB
đại diện cho một trong 6 mặt và hậu tố tùy chọn '2
đại diện cho góc quay. Thông tin này là không cần thiết để giải quyết nhiệm vụ.
Để đảm bảo rằng các cuộc tranh giành có 'chất lượng tốt', hai quy tắc sau đây phải được áp dụng:
Hai động tác liên tiếp không được có cùng một chữ cái. Đây cấm việc di chuyển liên tục
UU
,DD
,RR
,LL
,FF
vàBB
và tất cả các kết hợp của họ bằng cách sử dụng hậu tố tùy chọn nhưU2U
hayU'U'
.Các cặp di chuyển này bị cấm, bởi vì chúng có thể dễ dàng giảm xuống 1 hoặc 0 di chuyển.
U2U
có tác dụng tương tựU'
,R'R
tác dụng tương tự như.
Ba lần di chuyển liên tiếp không được thuộc cùng một nhóm chữ. Các nhóm thư là
UD
,RL
vàFB
. Quy tắc này bổ sung cấm việc di chuyển liên tụcUDU
,DUD
,RLR
,LRL
,FBF
,BFB
và tất cả các kết hợp của họ bằng cách sử dụng hậu tố tùy chọn nhưU2DU
,RL'R
hoặcB2FB'
.Các nhóm sắp xếp các mặt theo trục di chuyển của chúng.
U
vàD
nằm trong cùng một nhóm, vì cả hai đều quay quanh cùng một trục. Do đó, mộtU
động tác không ảnh hưởng đến các phần củaD
khuôn mặt và mộtD
di chuyển không ảnh hưởng đến các phần củaU
khuôn mặt. Do đó, hai động tác có thể được trao đổi,UDU
có tác dụng tương tựUUD
và điều này có thể được giảm xuốngU2D
.
Thử thách
Viết một kịch bản hoặc một hàm, tạo ra một sự xáo trộn ngẫu nhiên. Không có đầu vào. Tập lệnh / hàm phải in 25 di chuyển mà không tách hoặc tách bởi một khoảng trắng hoặc trả về chuỗi tương ứng.
Chương trình của bạn phải có khả năng tạo mọi tranh giành, đáp ứng các quy tắc trên. Tất nhiên, giả sử rằng trình tạo số ngẫu nhiên là ngẫu nhiên thực sự, và không giả ngẫu nhiên.
Đây là mã golf. Mã ngắn nhất (tính bằng byte ) sẽ thắng.
Ví dụ đầu ra:
Gọi script / hàm 3 lần sẽ in / trả về một cái gì đó như:
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
Nếu bạn tách di chuyển theo một khoảng trắng mỗi:
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'
Lưu ý rằng tất cả các kết quả đầu ra này bao gồm 25 di chuyển, nhưng có độ dài khác nhau, do các hậu tố tùy chọn. Không được phép in một khoảng trắng, khi một trong hai 2
hoặc '
được sử dụng làm hậu tố. Bạn phải in L2UR2F'R'U2
hoặc L2 U R2 F' R' U2
. L2U R2F'R'U2
không được đồng ý.
L2U R2F'R'U2
. U
không có hậu tố tùy chọn và do đó không nên có một khoảng trắng. Một không gian không nên là một thay thế cho hậu tố tùy chọn.
U F2 L D2 R'...
, ví dụ? Trong trường hợp này, không có thêm một không gian, mà tôi nghĩ sẽ ổn theo quy tắc của bạn.
UR 2
là không được phép?U R2
Tôi nên cho phép, vì không gian giữa các lần di chuyển có ý nghĩa.