この課題は、パンケーキの反転に関連しています。
パンケーキの並べ替えを聞いたことがあるかもしれません。パンケーキがプレート上で最小から最大に並べ替えられるまで、スパチュラをスタックに挿入し、スパチュラの上にあるすべてのパンケーキをひっくり返すことで、サイズによってパンケーキのスタックが並べ替えられます。焦げたパンケーキの問題は少し異なります。これで、すべてのパンケーキの片面が焼かれ、並べ替えが完了すると、各パンケーキの焼いた面がプレートに面する必要があります。
たとえば、次のスタックがある場合(左側のパンケーキのサイズ。右側が焼けた側を、右側が焼かれた側0
を1
意味します):
1 0
3 1
2 1
スタック全体を反転して取得し20 30 11
、トップ2を31 21 11
反転して取得し10 20 30
、スタック全体を反転して取得します。焦げたパンケーキのソートされたスタックです。この一連の動き、フリップ3、フリップ2、フリップ3は、として表すことができます3 2 3
。
チャレンジ
- パンケーキのサイズ(必ずしも一意ではない)の配列とその向きを指定して、有効な焼きパンケーキの並べ替え順序、つまり、焼き菓子の側面を下にしてパンケーキのスタックを最小から最大に並べ替える一連のフリップを出力します。
- 入力と出力は、区切り文字を含む任意の健全な形式である場合がありますが、使用する形式を指定し、入力形式のどちらの端がスタックの最上部(TOS)であるかを指定してください。
- ゼロのパンケーキの反転は許可されています。
- 入出力でセパレーターを混在させることができます。
テストケース
以下のすべてのテストケースでは、入力はリストであり、出力はスペースで区切られた文字列であり、TOSは左側にあります。
[[1, 0], [3, 1], [2, 1]]
"3 2 3"
[[5, 1], [3, 0], [4, 1], [2, 1], [1, 0]]
"5 3 4 1 3 2 1"
[[5, 1], [3, 0], [3, 0], [1, 1]]
"4 3 2 3"
いつものように、何か不明確または間違っている場合は、コメントで知らせてください。幸運と良いゴルフ!