Alternancia
Construye alternativas con precedencia menor que la concatenación.
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.
Alternancia y Ramificación: Operador Pipe (|)
El operador | permite especificar ramas alternativas (como cat|dog). Coincide si cualquiera de las ramas separadas por el pipe tiene éxito.
Modelo mental: Evaluación de ramas ordenadas
Al encontrar ramaA|ramaB:
- Se intenta cotejar
ramaAen la posición actual. - Si
ramaAcoincide, se toma esa bifurcación. - Si
ramaAno coincide, se retrocede al punto de inicio y se intentaramaB.
Tu objetivo en esta etapa
Soportar alternancia con | en op: "search".
Formato de Entrada
{
"op": "search",
"pattern": "cat|dog",
"text": "a dog"
}
Formato de Salida
{
"matched": true,
"span": [2, 5]
}
Qué debes hacer paso a paso
- Divide el patrón en alternativas: Divide el patrón en las opciones separadas por
|(fuera de grupos). - Prueba cada rama en orden: Para cada rama, ejecuta el motor de cotejo; si una rama tiene éxito, devuelve la coincidencia.
- Emite la salida: Escribe el JSON en stdout.
Criterios de aceptación
- ✅ Coincide con cualquiera de las opciones separadas por
|. - ✅ Reporta el
spancorrespondiente a la rama que coincidió.
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.