このチャレンジでは、入力としてアルファベット文字列が与えられます。与えられた入力の「アンチストリング」を、すべての文字の大文字と小文字を逆にしたストリングとして定義します。例えば
AaBbbUy -> aAbBBuY
入力として文字列を受け取り、アンチストリングも連続したサブストリングである最長の連続したサブストリングを検索するプログラムを作成する必要があります。2つの部分文字列は重複しないでください。
例として、文字列が与えられた場合
fAbbAcGfaBBagF
太字の部分は、最長のストリングアンチストリングペアです。
プログラムは、ペアを見つけたら、それぞれを1つの文字に折りたたむ必要があります。これは、各部分文字列の最初の文字を除くすべてを削除することでこれを行う必要があります。たとえば、上の文字列
fAbbAcGfaBBagF
になるだろう
fAcGfagF
その後、プログラムは、最長文字列のアンチストリングペアが1文字以下になるまでプロセスを繰り返す必要があります。
たとえば、同じ文字列を使用すると、崩壊後の新しい最長のペアは
fAcGfagF
もう一度文字列を折り畳みます
fAcGag
これで、文字列をさらに折りたたむことができないため、出力する必要があります。
候補のペアが同点の場合(例AvaVA
)、どちらかを削減することができます(AaA
またはAvV
、ではなく、Aa
)。
これはコードゴルフであるため、回答はバイト単位で記録され、バイト数は少ない方が良いでしょう。
テストケース
fAbbAcGfaBBagF -> fAcGag
AvaVA -> AaA / AvV
QQQQQQQ -> QQQQQQQ
fAbbAcQQQQaBBacqqqqA -> fAbcQBcq
gaq -> gaq
fAbbAcGfaBBagFaBBa -> fcGaBBag
動機
この問題はarbitrary意的に思えるかもしれませんが、基本的なポリゴンを処理するコードを作成しているときに実際に遭遇した問題です。このプロセスを使用して、基本ポリゴンをより小さなnポリゴンに減らすことができます。それを試した後、私はそれが素敵な小さなゴルフをするだろうと思った。
aaaAAAaaa -> aAaaa
?