このサイトで少し時間を過ごして、できるだけ短いものを楽しむようになりました。これが、同じ文字を複数回含む文字列に最近気分を害した理由かもしれません。あなたの仕事は、次のルールに従って特定の文字列を圧縮する関数またはプログラムを書くことです。
0-condensationで開始します。つまり、同じ文字の最初(左端)のペアを探し、その間に他の文字はありません。そのようなペアが見つかった場合、2つの文字のいずれかを削除し、別の0-condensationを実行してアルゴリズムを再起動します。そのようなペアが見つからない場合は、次の手順に進みます。例:
programming
-C0->programing
aabbcc
-C0->abbcc
test
-C0->test
次に1凝縮を実行します。つまり、同じ文字の最初のペアを探し、その間に他の1つの文字があります。そのようなペアが見つかった場合、それらの1つとそれらの間のすべての文字を削除し、0-condensationで再開します。そのようなペアが見つからない場合は、次の手順に進みます。例:
abacac
-C1->acac
java
-C1->ja
凝縮がいくつかの文字を削除した後に再起動するたびに、nが元の文字列の長さである2凝縮などをn 凝縮まで続けます。例:-C2-> -C3->
programing
praming
abcdafg
afg
結果の文字列は凝縮と呼ばれ、各文字が最大1回含まれます。
入力:
印刷可能なASCII文字の小文字の文字列。
出力:
凝縮上記ルールに従って文字列。
例:
examples -> es
programming -> praming
puzzles -> puzles
codegolf -> colf
andromeda -> a
abcbaccbabcb -> acb
if(x==1):x++ -> if(x+
fnabnfun -> fun
abcdefae -> abcde
アルゴリズムの仕組みを明確にする詳細な例:
fnabnfun -C0-> fnabnfun -C1-> fnabnfun -C2-> fnfun -C0-> fnfun -C1-> fun -C0-> fun
-C1-> fun -C2-> ... -C8-> fun
abcbaccbabcb -C0-> abcbacbabcb -C0-> abcbacbabcb -C1-> abacbabcb -C0-> abacbabcb
-C1-> acbabcb -C0-> acbabcb -C1-> acbcb -C0-> acbcb -C1-> acb -C0-> acb
-C1-> ... -C12-> acb
ソリューションとアルゴリズムがすべての許可された入力に対して同じ出力を返す限り、上記のアルゴリズムを実装する必要はありません。これはコードゴルフの挑戦です。
有益なサンドボックスコメントを寄せてくれた@Linusに感謝します!