Hola a todos, acá les dejo la resolución de la Quest Hash Is

Nota: Tengan en cuenta que esta no es ni por lejos la mejor forma de resolverlo, sirve a modo de que se hagan una idea de como funciona una función de hashing.. Pueden encontrar más info en el post Algoritmos de hashing. Saqué la idea de un slideshare que publiqué en esa nota.. La idea es devolver un número de cuatro dígitos a partir de cualquier string.. usando el código ASCII de cada letra.. (se podría decir que el máximo de registros posibles es de 10000) al contar solo con cuatro dígitos y que seguramente va a haber varias colisiones.

Acá la función:

function hashToASCII( string ) {
    if ( string == undefined || typeof string != "string" ) {
        console.log("no string");
        return false;
    }

    var hashed = 0;
    var code = string.split("");

    for ( var i = 0; i < code.length; i++ ) {
        code[i] = string.charCodeAt(i);
        hashed = hashed + code[i];
    }

    if ( hashed < 1000 ) {
        var tempHashed = hashed + "0";
        hashed = parseInt(tempHashed);
    } else if ( hashed > 10000 ) {
        var tempHashed = "" + hashed + "";
        hashed = parseInt(tempHashed.substring(0,4));
    }

    return hashed;
}

Algunos ejemplos y lo que retornan:


hashToASCII("hola mundo"); //9990
hashToASCII(""); // 0
hashToASCII(); // no string
hashToASCII(123); // no string
hashToASCII(false); // no string

Explicación: La función toma un string de entrada, en primer lugar verifica que lo que recibe es realmente un string, de no serlo la consola devuelvo el mensaje “no string”. Si es string la función se ejecuta. Lo primero que hace es generar un array donde cada elemento es un caracter del string mediante la función split(“”); esto por ejemplo si el string es “hola mundo” devolvería un array [“h”,”o”,”l”,”a”,” “,”m”,”u”,”n”,”d”,”o”] (Tengan en cuenta que los espacios también cuentan como caracteres). Luego recorre el array con el ciclo for y a cada elemento lo transforma a su correspondiente código ASCII mediante la función charCodeAt() y los va sumando uno a uno dentro de la variable hashed.

La idea de la función es retornar este número hashed, pero si el número tiene menos o más de 4 dígitos hace una transformación antes de retornarlo.

Espero que la idea les haya quedado clara, espero que se animen a investigar un poco más y logren hacer un buen algoritmo de hashing.

Saludos

Anuncios