スタック状態図は、1つのスタックの値が他のスタックにどのように変更されるかを示します。たとえば、これはスタック状態図です:
3 0 2 1 0
これは、最初に3つの値(3
パーツ)を含むスタックがあることを意味します。これらの値には0から2までのインデックスが付けられ、先頭に0が付きます2 1 0
。次の部分0 2 1 0
では、スタックの最終状態について説明します。元々スタックの最上位にあった値も、後方にコピーされています。
これらの変換は、いくつかのデータ型をサポートするスタックで発生します。
- 「値」タイプ。これは元々スタックにあったものです。これは文字列、整数などでもかまいませんが、その値を知る必要はありません。
- 「リスト」タイプ。これは、任意のデータタイプの値を含むリストです。
この変換をモデル化するには、次の操作が許可されます。
S
:スタックの上部にある2つの値を交換します。2 1 0
→2 0 1
D
:スタックの一番上に値を複製します:1 0
→1 0 0
R
:スタックの一番上の値を削除します。2 1 0
→2 1
L
:一番上の値を、その値を含む1要素のリストに変換します。2 1 0
→2 1 (0)
C
:スタックの上位2つのリストを連結します。2 (1) (0)
→2 (1 0)
U
:リストのすべての値をスタックに配置します。2 (1 0)
→2 1 0
これらは、他のコマンドが使用されない限り、Underloadコマンドと同等~ : ! a * ^
です。
S
、D
、R
、およびL
スタックの一番上の任意の値で使用することができますが、C
およびU
機能へのスタックの一番上にリストを持っている必要があります。その生成されたシーケンス(のような不正な操作プリフォームしようと提出D
空のスタック上またはU
非リスト上)があり、間違ったとされている必要があり処罰固定します。
スタック状態図を解決するには、初期スタック状態を新しい状態に正しく変換する一連のコマンドを見つけます。たとえば、1つの解決策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
スタックの最上位と2番目の位置にリストが必要ですか?または、2番目の位置の要素を一番上のリストに追加できますか?
C
両方の位置にリストが必要です。値とリストを連結しても意味がありません。