iBugは最近、複合材でありながら貴重な素材でできた長いバーを手に入れました。バーは非常に長いので、iBugはクレジットで簡単に販売できないので、彼はそれを削減したいと考えています。バーは、壊れやすい魔法の素材で作られているため、部品が破損すると、同じ素材で作られたバーのすべての部品も破損し、勝手に切断することが難しくなります。
iBugは、バーをできるだけ多くの部分にカットしたいと考えています。彼はまた、非常に短いプログラムとコードゴルフが大好きなので、彼は問題の抽象的な分析を行いました。
iBugのマジックバーは、次のように文字列(または必要に応じて文字列または配列)として表されます。
aaabbccccccbbbaaacccccaabbbaaaaa
文字列の各文字は、1つの魔法の素材を表します。バーは常にRegEx ^\w*$
と一致するため、バーには最大63個のマテリアルが存在する場合があります。「部分」とは、スペースで区切られていない任意の文字の連続したシーケンスです。
iBugは、ゼロ個以上の文字セットが完全に削除された場合(スペースに置き換えられた場合)、取得できる最大部分を計算するプログラムを作成し、その数をiBugに伝えてほしいと考えています。
例1:
In: aaabbccccccbbbaaacccccaabbbaaaaa
Out: 4
説明:b
バーから完全に削除された場合、iBugは4つのパーツを取得できます。彼はまた、除去することにより、4部を得ることができますb
し、c
下に示すように、
aaabbccccccbbbaaacccccaabbbaaaaa # Original string
aaa cccccc aaacccccaa aaaaa # Remove 'b'
aaa aaa aa aaaaa # Remove 'b' and 'c'
そして、これがiBugがこのバーから取得できる部品の最大数です
例2:
In: 111aa___9999____aaa99111__11_a_aa999
Result: 111aa 9999 aaa99111 11 a aa999
Out: 6
説明:アンダースコアのみを削除することにより、iBugはバーから6つの部分を取得できます。これは最大です。
例3:
In: __________
Out: 1
説明:何ですか?これを切りたい?カットしない場合にのみ、1つのパートを取得できます。
例4:
In:
Out: 0
説明:カットするものがないので、ゼロです。
iBugがプログラムに従わせたいルールもいくつかあります。
iBugは標準の抜け穴を嫌い、禁止されています。
それが機能する限り、完全なプログラムである必要はありません。パラメーターから入力を受け取り、戻り値を介して出力を与える関数も受け入れられます。
柔軟な入出力が可能です。プログラムまたは関数は、文字列、文字の配列、または最も扱いやすいものを受け取ることができます。数値を出力するか返すことにより、出力を提供できます。
サンプルテストケース(これらに限定されない)
aaabbbaaa = 2
123456789 = 5
AaAaAaAa = 4
aaabcccdedaaabefda = 6
________ = 1
(empty) = 0
これはcode-golfであるため、各言語の最短プログラム(バイト単位)が勝ちます!
追加
iBugは、得点に影響を与えない(バイト単位の長さである)にもかかわらず、プログラムの説明を提供していただければ幸いです。
2468
、2番目はremove bd
です。
2,4,6,8
、最初とb,d,f
2番目のチャレンジを削除します。
123456789
5を生成しますか?そして、どのようにしaaabcccdedaaabefda
て6を生成しますか?これら2つのテストケースでそれぞれ2と4を受け取ります。