前書き
Android Studioやその他のIDEには、効率的なコード挿入を支援するためのコード補完があります(特に、クラスまたはメソッドの名前が冗長である場合)。以下の画像のようになります。
提案するクラス、メソッド、変数を決定するためにIDE間で使用されるロジックは少し異なりますが、それ以外は一般的です。各単語の最初の文字を入力すると、それらの最初の文字と一致する識別子が提案されます。
チャレンジ
この課題では、2つの文字列、つまりinputおよびを受け取るプログラムまたは関数を記述してidentifier、identifier一致しinputます。
分割 identifier言葉にます:
- 小文字の後に大文字(
"SplitHere" -> "Split", "Here")。 - 大文字の後に大文字と小文字(
"SPLITHere" -> "SPLIT", "Here")、または - 数字またはアンダースコア
_("SPLIT_HERE" -> "SPLIT", "HERE")があります。
これでもまだ十分に明確でない場合は、分割する条件を表す正規表現を次に示します(?<=[a-z])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][a-z])|[_0-9]。ここにいくつかのサンプルがあります:
theWord_Example、3つのワード(ここでthe、Word、Example)を求めることができます。THEWORD2EXAMPLE、ここでは2つの単語(THEWORD、EXAMPLE)しか見つかりません(THEWORDは一連の大文字なのでEXAMPLE)。THEWordEXAMPLE3、ここで3つのワードが(THE、Word、Example)を求めることができる(Wordここでは別個のワードであると考えられます)。THEWORDEXAMPLEFOUR、1語のみ(THEWORDEXAMPLEFOUR)が見つかります(一連の大文字全体)。
この目的のために、ここでは簡略化されたバージョンを使用します。実際には、ロジックははるかに複雑です。このバージョンでは、2つのルールしかありません。
が
input小文字のみで構成されidentifierてinputいる場合、は、input部分文字列に分割されている場合にのみ一致します。各部分文字列についてidentifier、その部分文字列で始まる単語がその正確な順序で存在します。入力例:
sboTruthy例:、、(UPDATE)
SQLiteBindOrColumnIndexOutOfRangeExceptionSparseBooleanArrayStringIndexOutOfBoundException偽の場合:(
SeekBar欠落o)、(単語の先頭にない)StatusBarNotificationoinput大文字が含まれている場合は、inputルール1を適用するときに、各大文字の前にを分割する必要があります。入力例:
sbO真実のケース:
SQLiteBindOrColumnIndexOutOfRangeExceptionFalsy例:(単語の先頭に指定する必要があります)、 (間違った順序)
SparseBooleanArrayOStringIndexOutOfBoundException
I / O
入力:2つの文字列のための1 inputのためにと、1 identifier。あなたはとることのできる正規表現[A-Za-z]+マッチinputと正規表現[A-Za-z0-9_]の一致identifier。
出力:真または偽の値の1つ。どの値を真実として何を返すかを選択できますが、選択はすべてのケースで一貫している必要があります。あなたが返すことができる。例えば1/0、true/false、π/eまたは何が、彼らはすべてのケースで同じ滞在する必要があります。
テストケース
各行は、2つの文字列、つまりinputおよびidentifierそれぞれで構成されています。
真実のケース:
"sbo" "SparseBooleanArray"
"sbo" "StringIndexOutOfBoundException"
"sbo" "SQLiteBindOrColumnIndexOutOfRangeException"
"sbO" "SQLiteBindOrColumnIndexOutOfRangeException"
"Al" "ArrayList"
"AL" "ArrayList"
"Al" "ALARM_SERVICE"
"As" "ALARM_SERVICE"
"AS" "ALARM_SERVICE"
"SD" "SQLData"
"SqD" "SQLData"
"SqlD" "SQLData"
"SqDa" "SQLData"
"the" "theWord_Example"
"the" "THEWORD2EXAMPLE"
"the" "THEWordEXAMPLE3"
"the" "THEWORDEXAMPLEFOUR"
"thw" "theWord_Example"
"thw" "THEWordEXAMPLE3"
"te" "theWord_Example"
"te" "THEWORD2EXAMPLE"
"te" "THEWordEXAMPLE3"
偽のケース:
"sbo" "SeekBar"
"sbo" "StatusBarNotification"
"sbO" "StringIndexOutOfBoundException"
"sbO" "SparseBooleanArray"
"AL" "ALARM_SERVICE"
"ASE" "ALARM_SERVICE"
"SQD" "SQLData"
"SqLD" "SQLData"
"SLD" "SQLData"
"SQDt" "SQLData"
"SQDA" "SQLData"
"thw" "THEWORD2EXAMPLE"
"thw" "THEWORDEXAMPLEFOUR"
"te" "THEWORDEXAMPLEFOUR"
受賞基準
これはコードゴルフなので、各言語の最短コードが優先されます。デフォルトの抜け穴は許可されていません。
"sqldata", "SQLData"本当です。
"sbo" "StringIndexOutOfBoundException"一致でき*S*tringIndexOutOf*Bo*undExceptionますか?

"SQLData", "SQLData"だね?