당신의 임무는 임의의 동작 시퀀스를 만드는 것인데,이 동작은 루빅스 큐브를 뒤섞는 데 사용될 수 있습니다. 이러한 스크램블은 정확히 25 개의 동작으로 구성됩니다. 각 이동은 UDRLFB
선택적으로 접미사 중 하나가 오는 문자로 구성됩니다 '2
.
이 표기법을 Singmaster 표기법이라고합니다. UDRLFB
는 6 개의면 중 하나를 나타내고 선택적 접미사 '2
는 회전 각도를 나타냅니다. 이 정보는 작업을 해결하는 데 필요하지 않습니다.
스크램블이 '좋은 품질'이되도록하려면 다음 두 가지 규칙을 적용해야합니다.
두 번 연속으로 같은 글자를 가져서는 안됩니다. 이것은 연속적인 이동을 금지
UU
,DD
,RR
,LL
,FF
및BB
과 같은 옵션 접미사를 사용하여 모든 조합U2U
또는U'U'
.이 이동 쌍은 1 또는 0 이동으로 쉽게 줄일 수 있기 때문에 금지됩니다.
U2U
동일한 효과를 갖고U'
,R'R
동일한 효과.
세 번의 연속 이동은 동일한 문자 그룹이 아니어야합니다. 문자 그룹은
UD
,RL
하고FB
. 이 규칙은 추가로 연속 이동을 금지UDU
,DUD
,RLR
,LRL
,FBF
,BFB
와 같은 선택적 접미사를 사용하는 모든 조합U2DU
,RL'R
또는B2FB'
.그룹은 이동 축을 기준으로면을 정렬합니다.
U
그리고D
, 같은 그룹에있는 동일한 축을 중심으로 두 차례 때문이다. 따라서U
움직임은D
얼굴D
조각에 영향을 미치지 않으며 움직임은U
얼굴 조각에 영향을 미치지 않습니다 . 따라서 두 동작을 교환 할 수 있으며UDU
와 동일한 효과가UUD
있으며 이는로 줄일 수 있습니다U2D
.
도전
임의의 스크램블을 생성하는 스크립트 또는 함수를 작성하십시오. 입력이 없습니다. 스크립트 / 함수는 한 칸씩 분리하거나 분리하지 않고 25 개의 동작을 인쇄하거나 해당 문자열을 반환해야합니다.
프로그램은 위의 규칙을 만족하는 모든 단일 스크램블을 만들 수 있어야합니다. 물론, 난수 생성기는 의사 난수가 아니라 진정한 난수라고 가정합니다.
이것은 코드 골프입니다. 가장 짧은 코드 ( 바이트 단위로 계산 )가 이깁니다.
출력 예 :
스크립트 / 함수를 3 번 호출하면 다음과 같이 인쇄 / 반환해야합니다.
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
각각의 공백으로 동작을 분리하면 :
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'
이 모든 출력은 25 개의 동작으로 구성되지만 선택적 접미사로 인해 길이가 다릅니다. 접미사로 사용 2
되거나 공백 '
으로 사용되는 경우 공백을 인쇄 할 수 없습니다 . 당신은 인쇄해야 L2UR2F'R'U2
하거나 L2 U R2 F' R' U2
. L2U R2F'R'U2
허용되지 않습니다.
L2U R2F'R'U2
합니다. U
선택적 접미사가 없으므로 공백이 없어야합니다. 공백은 선택적 접미사를 대신해서는 안됩니다.
U F2 L D2 R'...
예를 들어 출력 할 수 있습니까? 이 경우 여분의 공간 이 없으므로 규칙에 따라 괜찮을 것 같습니다.
UR 2
허용되지 않았습니까 ? 나는 움직임 사이의 공백이 의미가 있기 때문에 허용U R2
되어야 한다고 생각합니다.