前書き
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
、その部分文字列で始まる単語がその正確な順序で存在します。入力例:
sbo
Truthy例:、、(UPDATE)
SQLiteBindOrColumnIndexOutOfRangeException
SparseBooleanArray
StringIndexOutOfBoundException
偽の場合:(
SeekBar
欠落o
)、(単語の先頭にない)StatusBarNotification
o
input
大文字が含まれている場合は、input
ルール1を適用するときに、各大文字の前にを分割する必要があります。入力例:
sbO
真実のケース:
SQLiteBindOrColumnIndexOutOfRangeException
Falsy例:(単語の先頭に指定する必要があります)、 (間違った順序)
SparseBooleanArray
O
StringIndexOutOfBoundException
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"
だね?