Cuantificadores
Parsea y ejecuta *, + y ? con repetición codiciosa.
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.
Cuantificadores Codiciosos: +, * y ?
Los cuantificadores modifican el átomo anterior para indicar repetición codiciosa (greedy):
+: Una o más repeticiones (mínimo 1).*: Cero o más repeticiones (mínimo 0).?: Cero o una repetición (opcional).
Modelo mental: Coincidencia codiciosa (Greedy) y Backtracking
Los cuantificadores codiciosos intentan consumir la mayor cantidad posible de caracteres. Si el resto del patrón falla posteriormente, el motor retrocede (backtracks) paso a paso liberando un carácter hasta que el resto del patrón pueda coincidir.
Tu objetivo en esta etapa
Soportar los cuantificadores +, *, ? en op: "search", devolviendo span: [inicio, fin].
Formato de Entrada
{
"op": "search",
"pattern": "ab+c?",
"text": "xxabbbczz"
}
Formato de Salida
{
"matched": true,
"span": [2, 7]
}
Qué debes hacer paso a paso
- Parsea el patrón en unidades de átomo + cuantificador:
- Cada átomo (literal o punto) puede ir seguido opcionalmente de
+,*o?.
- Cada átomo (literal o punto) puede ir seguido opcionalmente de
- Implementa cotejo recursivo con retroceso (backtracking):
- Para
*: consume el átomo codiciosamente tantas veces como sea posible, y si el resto falla, retrocede una repetición. - Para
+: exige al menos 1 coincidencia y luego procede como*. - Para
?: intenta primero coincidir 1 vez; si falla el resto, intenta con 0 coincidencias.
- Para
- Emite la salida: Escribe el objeto con
matchedyspanen stdout.
Criterios de aceptación
- ✅ Resuelve
+,*y?de forma codiciosa. - ✅ Aplica retroceso (backtracking) cuando sea necesario.
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.