Introdução
No Android Studio e em outros IDEs, existem conclusões de código para ajudar na inserção eficiente de código (especialmente quando os nomes das classes ou métodos são muito detalhados), como o da imagem abaixo.
Existem lógicas ligeiramente diferentes usadas entre IDEs para determinar quais classes, métodos e variáveis sugerir, mas são comuns: digitar as letras iniciais de cada palavra e o identificador correspondente a essas letras iniciais será sugerido.
Desafio
Neste desafio, escreva um programa ou função que receba duas strings, a saber , inpute identifierdetermine se identifiercorresponde a input.
Dividimos identifierem palavras onde:
- uma letra minúscula é seguida por uma letra maiúscula (
"SplitHere" -> "Split", "Here"), - uma letra maiúscula é seguida por uma letra maiúscula e uma letra minúscula (
"SPLITHere" -> "SPLIT", "Here"), ou - existe um número ou um sublinhado
_("SPLIT_HERE" -> "SPLIT", "HERE").
Se isso ainda não é suficientemente clara, aqui é o regex representando a condição de separação: (?<=[a-z])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][a-z])|[_0-9]. Aqui estão algumas amostras:
theWord_Example, Em que 3 palavras (the,Word,Example) pode ser encontrado.THEWORD2EXAMPLE, em que apenas duas palavras (THEWORD,EXAMPLE) podem ser encontradas (porqueTHEWORDsão letras maiúsculas e o mesmo aconteceEXAMPLE).THEWordEXAMPLE3, Em que 3 palavras (THE,Word,Example) podem ser encontrados (Wordé considerado como uma palavra separada aqui).THEWORDEXAMPLEFOUR, em que apenas 1 palavras (THEWORDEXAMPLEFOUR) podem ser encontradas (toda a série de letras maiúsculas).
Para esse fim, usamos uma versão simplificada. Na realidade, a lógica é muito mais complexa. Nesta versão, existem apenas duas regras:
Se
inputconsistir apenas em letras minúsculas, umidentifiercorresponderá aoinputúnico se houver uma divisãoinputem substrings, que para cada substring existe uma palavra dentro doidentifierinício com esse substring, nessa ordem exata.Exemplo de entrada:
sboCasos Truthy: , , (actualização)
SQLiteBindOrColumnIndexOutOfRangeExceptionSparseBooleanArrayStringIndexOutOfBoundExceptionCasos de falsidade:
SeekBar(ausenteo), ( não está no início de uma palavra)StatusBarNotificationoSe
inputcontiver letras maiúsculas, uma divisão nainputdeve ser feita antes de cada letra maiúscula ao aplicar a Regra 1.Exemplo de entrada:
sbOCasos verdadeiros:
SQLiteBindOrColumnIndexOutOfRangeExceptionCasos de falsidade: ( devem aparecer no início de uma palavra), (ordem errada)
SparseBooleanArrayOStringIndexOutOfBoundException
I / O
Entrada : duas strings, uma para inpute uma para identifier. Você pode supor que o regex [A-Za-z]+corresponde inpute o regex [A-Za-z0-9_]corresponde identifier.
Saída : um dos valores verdadeiros ou falsos. Você pode escolher qual valor retornar como verdadeiro e qual falso, mas sua escolha deve ser consistente em todos os casos. Por exemplo, você pode retornar 1/0, true/false, π/eou o que quer, mas eles devem permanecer o mesmo em todos os casos.
Casos de teste
Cada linha consiste em duas cadeias, a saber inpute identifierrespectivamente.
Casos verdadeiros:
"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"
Casos de falsidade:
"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"
Critérios Vencedores
Este é um código de golfe , portanto o código mais curto de cada idioma vence. As brechas padrão não são permitidas.
"sqldata", "SQLData"é verdade.
"sbo" "StringIndexOutOfBoundException"combinar *S*tringIndexOutOf*Bo*undException?

"SQLData", "SQLData"é falso?