ブルガリアソリティアは、マーティンガードナーがScientific Americanの数学的コラムで人気を博したシングルプレイヤーゲームです。です。
あなたが持っている N同じカードを山に分けています。あなたは各山からカードを取り、取り除かれたカードで新しい山を形成します。すでに見た状態に到達するまでこのプロセスを繰り返し、続行するとループが繰り返されます。
たとえば、8カードが5あり、の山との山に分割されているとします3。杭のサイズを降順に記述します5 3。ここにゲームのトランスクリプトがあります:
5 3
4 2 2
3 3 1 1
4 2 2
あなたは最初の山を残し、2つの山のそれぞれからカードを取り外す4と2、との新しく作成された杭2与えます4 2 2。次のステップでは、これらは減少3 1 1し、新しいの山が続き3ます。最後に、最後のステップでサイズの山が空になり、すでに表示されているものが1生成さ4 2 2れるため、停止します。
パイルサイズの合計は同じままであることに注意してください。
あなたの目標は、与えられた開始構成からゲームのそのようなトランスクリプトを印刷することです。これはコードゴルフなので、最も少ないバイトが勝ちます。
入力
初期の杭サイズを表す降順の正の数のリスト。STDINまたは関数入力を介して入力を取得します。リストのような任意の構造を使用できます。
N入力としてカードの総数を取得しません。
出力
ブルガリアソリティアのゲームが通過するパイルサイズのシーケンスを印刷します。返却ではなく、印刷が必要であることに注意してください。各ステップは独自の行である必要があります。
各行には、のない降順の正の数のシーケンスが必要0です。セパレータ、開始トークン、終了トークンを使用できます(たとえば、[3, 3, 1, 1])。数字は複数の桁を持っている可能性があるため、何らかの方法で分離する必要があります。
リピートに至るまで、見ているパイルサイズのスプリットを印刷します。したがって、最初の行は入力であり、最後の行は前の行の繰り返しでなければなりません。他の繰り返しはありません。
テストケース
>> [1]
1
1
>> [2]
2
1 1
2
>> [1, 1, 1, 1, 1, 1, 1]
1 1 1 1 1 1 1
7
6 1
5 2
4 2 1
3 3 1
3 2 2
3 2 1 1
4 2 1
>> [5, 3]
5 3
4 2 2
3 3 1 1
4 2 2
>> [3, 2, 1]
3 2 1
3 2 1
>> [4, 4, 3, 2, 1]
4 4 3 2 1
5 3 3 2 1
5 4 2 2 1
5 4 3 1 1
5 4 3 2
4 4 3 2 1
v$input()$てQ。2.順にリストを保存する場合、必要のないNすべてで:W!}QYQ~Y]Q=Q_S+fTmtdQ]lQ;Q