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 , input
e identifier
determine se identifier
corresponde a input
.
Dividimos identifier
em 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 (porqueTHEWORD
sã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
input
consistir apenas em letras minúsculas, umidentifier
corresponderá aoinput
único se houver uma divisãoinput
em substrings, que para cada substring existe uma palavra dentro doidentifier
início com esse substring, nessa ordem exata.Exemplo de entrada:
sbo
Casos Truthy: , , (actualização)
SQLiteBindOrColumnIndexOutOfRangeException
SparseBooleanArray
StringIndexOutOfBoundException
Casos de falsidade:
SeekBar
(ausenteo
), ( não está no início de uma palavra)StatusBarNotification
o
Se
input
contiver letras maiúsculas, uma divisão nainput
deve ser feita antes de cada letra maiúscula ao aplicar a Regra 1.Exemplo de entrada:
sbO
Casos verdadeiros:
SQLiteBindOrColumnIndexOutOfRangeException
Casos de falsidade: ( devem aparecer no início de uma palavra), (ordem errada)
SparseBooleanArray
O
StringIndexOutOfBoundException
I / O
Entrada : duas strings, uma para input
e uma para identifier
. Você pode supor que o regex [A-Za-z]+
corresponde input
e 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
, π/e
ou o que quer, mas eles devem permanecer o mesmo em todos os casos.
Casos de teste
Cada linha consiste em duas cadeias, a saber input
e identifier
respectivamente.
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?