En Happy Hacking los retos de Linux y Bash piden escribir un comando o una ruta. Calificar eso parece trivial: pasas a minúsculas, quitas espacios y comparas. Pero así bloqueaba a gente que sí sabía la respuesta.
Lo que me importó resolver
Mi primera versión comparaba con strip().lower() exacto. Entonces cada reto tenía que enumerar a mano todo lo que un humano podía escribir. Quien respondía «el comando pwd», «pwd.» o «$ pwd» gastaba intentos, y cuando por fin escribía «pwd» a secas, el tope de intentos ya le devolvía un 429. Sabía la respuesta y el sistema se la rechazaba.
La corrección fue normalizar, con una regla conservadora: solo se quita lo que no aporta significado. Se ignoran mayúsculas, acentos, el prompt de la terminal y la puntuación de los bordes. Hay una lista corta de muletillas («el», «comando», «usar»), y evito poner ahí cualquier palabra que pueda ser la respuesta de algún reto, porque cada entrada reduce lo que el reto puede distinguir. Por dentro de cada palabra no recorto nada, para que una IP o una cabecera con guiones sobrevivan.
El error que quedaba
Al quitar la puntuación de los bordes, también se quitaba el punto inicial de una ruta. Entonces ./informe.log y /informe.log quedaban iguales. En Bash son dos rutas distintas: una relativa y otra desde la raíz. Un reto sobre esa diferencia aprobaba a quien se equivocaba.
La comparación tenía dos vías, la directa y la que ignora muletillas, y las dos quitaban ese signo. Arreglar solo una dejaba el hueco abierto en la otra. La corrección protege la sintaxis técnica (barras, puntos iniciales, operadores como >>) en ambas vías, antes de limpiar la puntuación de conversación.
La comprobé con una prueba que falla contra el código viejo, y confirmé que si rompo la protección a propósito la prueba vuelve a fallar.
Qué hace
Cada reto te dice si acertaste, por qué y cuánta experiencia ganaste. La explicación aparece cuando aciertas o cuando agotas los intentos. Lo que escribes se compara con esta normalización; nada de lo que pones se interpreta ni se ejecuta como shell.
Pruébalo
Los retos están en happyhacking.app. El proyecto completo, con sus límites declarados, está en la ficha de Happy Hacking.