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 . - 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
{
"op": "search",
"pattern": "^cat$",
"text": "a cat"
}
Formato de Salida
{
"matched": false
}
Qué debes hacer paso a paso
- 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.
- Revisa si el patrón comienza con
- Búsqueda con ventana deslizante:
- Si tiene
^: intenta cotejar únicamente en el desplazamiento 0. - Si no tiene
^: itera el desplazamiento inicialstartdesde 0 hasta el final del texto.
- Si tiene
- Verificación de ancla final
$:- Si tiene
$, la coincidencia solo es exitosa si el índice final alcanzatext.length.
- Si tiene
- 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.