Construye tu propio motor de expresiones regulares
Etapa 2 de 8v2 · d2c34479

Anclas y búsqueda

Distingue coincidencia desde el inicio de búsqueda en cualquier posición y aplica ^ y $.

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.

Anclas de Inicio (^) y Fin ($), y Búsqueda en Subcadenas

A diferencia de match (que exige coincidencia desde el inicio), la operación search busca la expresión en cualquier posición dentro del texto, a menos que esté restringida por anclas:

  • ^: Obliga a que la coincidencia empiece exactamente en el índice 0 del texto.
  • $: Obliga a que la coincidencia termine exactamente en el último carácter del texto.

Modelo mental: Ventana deslizante y anclas

  • Si el patrón inicia con ^: solo se intenta cotejar en la posición inicial 0.
  • Si no tiene ^: se intenta cotejar en cada posición i=0,1,2,…,text.lengthi = 0, 1, 2, \dots, \text{text.length}.
  • Si el patrón termina con $: la coincidencia solo es válida si consume el texto hasta su final.

Tu objetivo en esta etapa

Soportar op: "search" con las anclas ^ y $. Si coincide, devolver matched: true y span: [inicio, fin]; si no, devolver matched: false.

Formato de Entrada

json
{
  "op": "search",
  "pattern": "^cat$",
  "text": "a cat"
}

Formato de Salida

json
{
  "matched": false
}

Qué debes hacer paso a paso

  1. Detecta anclas:
    • Revisa si el patrón comienza con ^ y retíralo para el cotejo interno.
    • Revisa si el patrón termina con $ (y no está escapado) y retíralo.
  2. Búsqueda con ventana deslizante:
    • Si tiene ^: intenta cotejar únicamente en el desplazamiento 0.
    • Si no tiene ^: itera el desplazamiento inicial start desde 0 hasta el final del texto.
  3. Verificación de ancla final $:
    • Si tiene $, la coincidencia solo es exitosa si el índice final alcanza text.length.
  4. Emite la salida: Escribe el resultado en stdout.

Criterios de aceptación

  • ✅ Respeta ^ para anclar al inicio y $ para anclar al final.
  • ✅ Encuentra subcadenas en cualquier posición si no hay anclas.

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.