Fannkuchは、古典的なベンチマークプログラムです。この名前は、パンケーキの山をひっくり返すアルゴリズムに似ているため、ドイツの「ファンクーヘン」-パンケーキ-に由来しています。番号の Fannkuchシーケンスは次のように形成されます。
{1 ..... n}の順列を使用します(例:{4,2,1,5,3})。最初の要素(ここでは4)を取得し、最初の4つの要素の順序を逆にします:{5,1,2,4,3}。最初の要素が1になるまでこれを繰り返します。したがって、反転してもそれ以上何も変わりません:{3,4,2,1,5}、{2,4,3,1,5}、{4,2,3、 1,5}、{1,3,2,4,5}
あなたは、アルファベット文字の文字列のために、Fannkuchのようなシーケンスを計算するプログラムまたは関数を書くことになっています。毎回リストの要素をいくつ反転させるかを示すために数字を使用する代わりに、アルファベットの文字の位置を使用する必要があります。たとえば、先頭c
は、最初の3つの要素の順序を逆にする必要があることをa
示し、先頭は、シーケンスが完了したことを示します。
入力
入力は、stdin経由の文字列または関数の引数として提供されます。文字列には、1〜26個の異なる小文字が含まれます。文字列には、同等のインデックスによってFannkuchアルゴリズムが存在するよりも多くの要素を反転させる文字は含まれません。
出力
プログラムまたは関数は、先頭a
文字列を含む先頭に到達するまでFannkuchアルゴリズムを適用することによって生成された用語のシーケンスを標準出力に返すか、印刷する必要があります。たとえば、入力がの場合bca
、次を印刷できます。
bca
cba
abc
印刷結果には、コンマ、改行などの適切な区切り文字を使用できます。空白の選択は任意です。
別の例として、入力がeabdc
次のように返される場合があります。
("eabdc"
"cdbae"
"bdcae"
"dbcae"
"acbde")
ルールとスコアリング
これはコードゴルフです -最短のプログラムが勝ちます。標準の抜け穴は許可されていません。
proc fcmp
。