Clases y grupos
Añade clases, rangos, negación y grupos para controlar precedencia.
Constrúyelo en tu lenguaje
El tester trata tu programa como una caja negra: sirve cualquier lenguaje. Estos son los más cómodos para este proyecto.
Clases de Caracteres ([abc], [A-Z], [^0-9]) y Agrupación
Las clases de caracteres entre corchetes coinciden con un único carácter de un conjunto:
- Rangos:
[a-z],[0-9],[A-C]. - Negadas:
[^0-9](coincide con cualquier carácter que no sea dígito). - Agrupación con paréntesis:
([A-C][^0-9])+permite aplicar cuantificadores a secuencias complejas.
Modelo mental: Conjunto de predicados por carácter
Una clase [A-C][^0-9]:
- Primer átomo:
[A-C]-> carácter entre'A'y'C'. - Segundo átomo:
[^0-9]-> cualquier carácter que no esté entre'0'y'9'. - Paréntesis
(...)+: Agrupa los dos átomos anteriores para que el cuantificador+repita la pareja completa.
Tu objetivo en esta etapa
Soportar clases de caracteres positivas, con rangos, negadas y grupos con cuantificadores.
Formato de Entrada
{
"op": "search",
"pattern": "([A-C][^0-9])+",
"text": "xxAbCz7"
}
Formato de Salida
{
"matched": true,
"span": [2, 6]
}
Qué debes hacer paso a paso
- Parsea clases
[...]:- Si inicia con
^: es negada. - Detecta rangos
x-ycomparando códigos de carácter (char >= 'A' && char <= 'C').
- Si inicia con
- Parsea grupos
(...):- Trata el contenido entre paréntesis como un sub-patrón compuesto.
- Aplica cuantificadores sobre grupos o clases.
- Emite la salida: Escribe el resultado en stdout.
Criterios de aceptación
- ✅ Interpreta clases simples y rangos alfanuméricos.
- ✅ Interpreta clases negadas (
[^...]). - ✅ Agrupa sub-expresiones con paréntesis y permite cuantificarlas.
Formato de salida y errores
Los ejemplos multilínea se muestran así para facilitar la lectura. Emite JSON compacto, sin espacios opcionales, con las propiedades en el orden de los ejemplos de salida y un salto de línea final. No escribas logs en stdout. Las pruebas comparan texto exacto.
Para entradas inválidas, usa stderr con la palabra error, stdout vacío y código 1. Para entradas válidas, código 0. Usa números JSON enteros cuando el resultado sea entero.