Construye tu propio motor de expresiones regulares
Etapa 4 de 8v2 · 8320f6f9

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:

  1. Se intenta cotejar ramaA en la posición actual.
  2. Si ramaA coincide, se toma esa bifurcación.
  3. Si ramaA no coincide, se retrocede al punto de inicio y se intenta ramaB.

Tu objetivo en esta etapa

Soportar alternancia con | en op: "search".

Formato de Entrada

json
{
  "op": "search",
  "pattern": "cat|dog",
  "text": "a dog"
}

Formato de Salida

json
{
  "matched": true,
  "span": [2, 5]
}

Qué debes hacer paso a paso

  1. Divide el patrón en alternativas: Divide el patrón en las opciones separadas por | (fuera de grupos).
  2. Prueba cada rama en orden: Para cada rama, ejecuta el motor de cotejo; si una rama tiene éxito, devuelve la coincidencia.
  3. Emite la salida: Escribe el JSON en stdout.

Criterios de aceptación

  • ✅ Coincide con cualquiera de las opciones separadas por |.
  • ✅ Reporta el span correspondiente 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.