Test de huella digital - FreeCodeCamp Daily Challenge
1 min
¿De qué trata el reto?
En este desafío de FreeCodeCamp, tenemos dos cadenas de texto (huellas digitales) hechas solo con letras minúsculas. Queremos saber si son lo suficientemente parecidas para considerarlas “iguales” según dos reglas simples:
- Deben tener la misma longitud (el mismo número de letras).
- No pueden ser muy diferentes: solo se permite que hasta el 10% de las letras sean distintas.
Ejemplos fáciles
helloworldyjelloworld→ Solo cambia la primera letra, así que sí coinciden.abcyxyz→ Todas las letras son diferentes, así que no coinciden.
¿Cómo lo resolvemos?
La idea es comparar letra por letra:
- Si las cadenas no tienen la misma cantidad de letras, devolvemos
false. - Si sí, contamos cuántas letras son diferentes.
- Si las diferencias no superan el 10% del total, devolvemos
true.
Código simple en JavaScript
function isMatch(fingerprint1, fingerprint2) {
if (fingerprint1.length !== fingerprint2.length)
return false
let diferencias = 0
for (let i = 0; i < fingerprint1.length; i++) {
if (fingerprint1[i] !== fingerprint2[i])
diferencias++
}
return diferencias <= fingerprint1.length * 0.1
}¿Por qué funciona?
- Compara solo lo necesario.
- Es rápido incluso para cadenas largas.
- Es fácil de entender y modificar.
Casos curiosos
- Si ambas cadenas están vacías, se consideran iguales.
- Si solo una letra es diferente y el total es 10 o más, todavía coinciden.
Prueba tú mismo
isMatch('helloworld', 'jelloworld') // true
isMatch('abc', 'xyz') // false
isMatch('test', 'test') // true
isMatch('abc', 'abx') // true