Introducción
En Android Studio y otros IDE hay compleciones de código para ayudar a la inserción eficiente del código (especialmente cuando los nombres de las clases o métodos son tan detallados), como el de la imagen a continuación.
Se utilizan lógicas ligeramente diferentes entre los IDE para determinar qué clases, métodos y variables sugerir, pero de lo contrario son comunes: escribir las letras iniciales de cada palabra y se sugerirá el identificador que coincida con esas letras iniciales.
Desafío
En este desafío, escriba un programa o función que reciba dos cadenas, a saber , input
y identifier
determine si identifier
coincide con el input
.
Nos dividimos identifier
en palabras donde:
- una letra minúscula es seguida por una letra mayúscula (
"SplitHere" -> "Split", "Here"
), - una letra mayúscula es seguida por una letra mayúscula y una letra minúscula (
"SPLITHere" -> "SPLIT", "Here"
), o - hay un número o un guión bajo
_
("SPLIT_HERE" -> "SPLIT", "HERE"
).
Si esto todavía no es lo suficientemente claro, aquí es la expresión regular que representa la condición de división: (?<=[a-z])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][a-z])|[_0-9]
. Aquí están algunas muestras:
theWord_Example
, En la que 3 palabras (the
,Word
,Example
) se pueden encontrar.THEWORD2EXAMPLE
, en el que solo se pueden encontrar 2 palabras (THEWORD
,EXAMPLE
) (porqueTHEWORD
es una serie de letras mayúsculas y también lo haceEXAMPLE
).THEWordEXAMPLE3
, En la que 3 palabras (THE
,Word
,Example
) se pueden encontrar (Word
se considera que es una palabra separada aquí).THEWORDEXAMPLEFOUR
, en el que soloTHEWORDEXAMPLEFOUR
se pueden encontrar 1 palabras ( ) (toda la serie de letras mayúsculas).
Para este propósito aquí usamos una versión simplificada. En realidad, la lógica es mucho más compleja. En esta versión solo hay dos reglas:
Si
input
consiste solo en letras minúsculas, entonces unidentifier
coincide con elinput
único si hay una divisióninput
en subcadenas, que para cada subcadena hay una palabra dentro delidentifier
comienzo con esa subcadena, en ese orden exacto.Entrada de ejemplo:
sbo
Truthy casos: , , (actualización)
SQLiteBindOrColumnIndexOutOfRangeException
SparseBooleanArray
StringIndexOutOfBoundException
Casos de falsa:
SeekBar
(faltao
), (el no está al comienzo de una palabra)StatusBarNotification
o
Si
input
contiene letras mayúsculas, seinput
debe hacer una división antes de cada letra mayúscula al aplicar la Regla 1.Entrada de ejemplo:
sbO
Casos verdaderos:
SQLiteBindOrColumnIndexOutOfRangeException
Casos falsos: ( deben aparecer al principio de una palabra), (orden incorrecto)
SparseBooleanArray
O
StringIndexOutOfBoundException
I / O
Entrada : dos cadenas, una para input
y una para identifier
. Puede suponer que la expresión regular [A-Za-z]+
coincide input
y la expresión regular [A-Za-z0-9_]
coincide identifier
.
Salida : uno de los valores de verdad o falsedad. Puede elegir qué valor devolver como verdadero y falso, pero su elección debe ser coherente en todos los casos. Por ejemplo, usted puede regresar 1/0
, true/false
, π/e
o lo que sea, pero debe permanecer igual en todos los casos.
Casos de prueba
Cada línea consta de dos cadenas, a saber, input
y identifier
respectivamente.
Casos verdaderos:
"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 falsa:
"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"
Criterios ganadores
Este es un código de golf , por lo que gana el código más corto de cada idioma. Las lagunas predeterminadas no están permitidas.
fuente
"SQLData", "SQLData"
es falso?"sqldata", "SQLData"
es verdad."sbo" "StringIndexOutOfBoundException"
coincidir*S*tringIndexOutOf*Bo*undException
?Respuestas:
Python 2 ,
239227 bytesPruébalo en línea!
fuente
JavaScript (ES6), 177 bytes
Espera
(identifier)(input)
.Pruébalo en línea!
fuente