この識別子を提案する必要がありますか?


8

前書き

Android Studioやその他のIDEには、効率的なコード挿入を支援するためのコード補完があります(特に、クラスまたはメソッドの名前が冗長である場合)。以下の画像のようになります。

ここに画像の説明を入力してください

提案するクラス、メソッド、変数を決定するためにIDE間で使用されるロジックは少し異なりますが、それ以外は一般的です。各単語の最初の文字を入力すると、それらの最初の文字と一致する識別子が提案されます。

チャレンジ

この課題では、2つの文字列、つまりinputおよびを受け取るプログラムまたは関数を記述してidentifieridentifier一致し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つのワード(ここでtheWordExample)を求めることができます。
  • THEWORD2EXAMPLE、ここでは2つの単語(THEWORDEXAMPLE)しか見つかりません(THEWORDは一連の大文字なのでEXAMPLE)。
  • THEWordEXAMPLE3、ここで3つのワードが(THEWordExample)を求めることができる(Wordここでは別個のワードであると考えられます)。
  • THEWORDEXAMPLEFOUR、1語のみ(THEWORDEXAMPLEFOUR)が見つかります(一連の大文字全体)。

この目的のために、ここでは簡略化されたバージョンを使用します。実際には、ロジックははるかに複雑です。このバージョンでは、2つのルールしかありません。

  1. input小文字のみで構成されidentifierinputいる場合、は、input部分文字列に分割されている場合にのみ一致します。各部分文字列についてidentifier、その部分文字列で始まる単語がその正確な順序で存在します。

    入力例: sbo

    Truthy例:、、(UPDATE)SQLiteBindOrColumnIndexOutOfRangeExceptionSparseBooleanArray StringIndexOutOfBoundException

    偽の場合:(SeekBar欠落o)、(単語の先頭にない)StatusBarNotificationo

  2. input大文字が含まれている場合は、inputルール1を適用するときに、各大文字の前にを分割する必要があります。

    入力例: sbO

    真実のケース: SQLiteBindOrColumnIndexOutOfRangeException

    Falsy例:(単語の先頭に指定する必要があります)、 (間違った順序)SparseBooleanArrayOStringIndexOutOfBoundException

I / O

入力:2つの文字列のための1 inputのためにと、1 identifier。あなたはとることのできる正規表現[A-Za-z]+マッチinputと正規表現[A-Za-z0-9_]の一致identifier

出力:真または偽の値の1つ。どの値を真実として何を返すかを選択できますが、選択はすべてのケースで一貫している必要があります。あなたが返すことができる。例えば1/0true/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"

受賞基準

これはので、各言語の最短コードが優先されます。デフォルトの抜け穴は許可されていません。


1
そう"SQLData", "SQLData"だね?
l4m2

@ l4m2はい、簡略化されたルールに従います。しかし"sqldata", "SQLData"本当です。
浅琴しげる2018年

1
"sbo" "StringIndexOutOfBoundException"一致でき*S*tringIndexOutOf*Bo*undExceptionますか?
TFeld 2018年

@TFeldああ、思い出してくれてありがとう
浅琴しげる

回答:



弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.