스택 상태 다이어그램은 한 스택의 값이 다른 스택으로 어떻게 변경되는지 보여줍니다. 예를 들어, 이것은 스택 상태 다이어그램입니다.
3 0 2 1 0
이는 처음에 3 개의 값 ( 3
부분)을 포함하는 스택이 있음을 의미합니다 . 이 값은 0에서 2까지 색인화되며 맨 위에 0이 표시됩니다 2 1 0
. 다음 부분 0 2 1 0
에서는 스택의 최종 상태에 대해 설명합니다. 원래 스택 위에 있던 값도 뒤쪽으로 복사되었습니다.
이러한 변환은 여러 데이터 유형을 지원하는 스택에서 발생합니다.
- "값"유형은 원래 스택에있는 유형입니다. 문자열, 정수 등일 수 있지만 값을 알 필요는 없습니다.
- "목록"유형. 모든 데이터 유형의 값을 포함하는 목록입니다.
이 변환을 모델링하기 위해 다음 작업이 허용됩니다.
S
: 스택 위에 두 값을 교환합니다.2 1 0
→2 0 1
D
: 스택 위에 값을 복제합니다.1 0
→1 0 0
R
: 스택에서 최고 값을 제거합니다.2 1 0
→2 1
L
: 최상위 값을 해당 값이 포함 된 단일 요소 목록으로 바꿉니다.2 1 0
→2 1 (0)
C
: 스택에서 상위 2 개의 목록을 연결하십시오.2 (1) (0)
→2 (1 0)
U
: 목록의 모든 값을 스택에 배치하십시오.2 (1 0)
→2 1 0
이것들은 ~ : ! a * ^
다른 명령이 사용되지 않는 경우 이는 Underload 명령 .
S
, D
, R
및 L
스택의 상단에있는 값으로 사용될 수 있지만, C
및 U
함수에 스택 위에 목록을 가져야한다. 생성 된 시퀀스가 유효하지 않은 연산을 수행하려고 시도하는 제출 (예 D
: 빈 스택 또는 U
목록이 아닌)이 잘못되었습니다. 되어야 처벌 고정.
스택 상태 다이어그램을 해결하려면 초기 스택 상태를 새 스택 상태로 올바르게 변환하는 명령 시퀀스를 찾으십시오. 예를 들어, 한 가지 해결책 3: 0 2 1 0
은LSLCSLCULSLCLSLDCSC USLCU
다음과 같습니다.
2 1 0
L 2 1 (0)
S 2 (0) 1
L 2 (0) (1)
C 2 (0 1)
S (0 1) 2
L (0 1) (2)
C (0 1 2)
U 0 1 2
L 0 1 (2)
S 0 (2) 1
L 0 (2) (1)
C 0 (2 1)
L 0 ((2 1))
S ((2 1)) 0
L ((2 1)) (0)
D ((2 1)) (0) (0)
C ((2 1)) (0 0)
S (0 0) ((2 1))
C (0 0 (2 1))
U 0 0 (2 1)
S 0 (2 1) 0
L 0 (2 1) (0)
C 0 (2 1 0)
U 0 2 1 0
당신의 임무는 스택 상태 다이어그램을 가져 와서 솔루션을 출력하는 프로그램을 작성하는 것입니다.
테스트 사례
2 1 0 ->
3 2 0 -> SR
9 -> RRRRRRRRR
2 0 1 0 -> LSLCDCUR
2 0 1 1 -> SD
6 2 -> RRSRSRSR
5 0 1 2 3 4 -> LSLCSLCSLCSLCU
4 2 0 1 3 2 -> LSLCSLSCSLCULSLSCSLSCLSLDCSCUSLCU
이것은 code-golf 이므로 가장 짧은 유효한 답변 (바이트)이 이깁니다.
C
스택의 상단과 두 번째 위치에 필요 목록을? 또는 두 번째 위치의 요소를 맨 위에 목록에 추가 할 수 있습니까?
C
두 위치 모두에 대한 목록이 필요합니다. 값과 목록을 연결하는 것은 의미가 없습니다.