Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Desafio Hash Java

Fala pessoal, blz? Recebi esse desafio em JAVA, tenho pouco tempo pra resolver. Resumindo, estou buscando conteúdo para resolve-lo mas ainda não encontrei. Como eu disse, tenho pouco tempo e não faço ideia de como resolve-lo, me ajudem, please!

Encontre uma palavra de 7 letras que contenha apenas as letras ‘acdegilmnoprstuw’ de forma que hash(string) é 695527946727. Onde o hash é definido pelo seguinte código:

private static final int HASH = 7;
private static final int FACTOR = 37;
private static final String LETTERS = "acdegilmnoprstuw";
private static long getHash( String s )
{
long h = HASH;
int lLen = s.length();
for ( int i = 0; i < lLen; i ++ )
h = h * FACTOR + LETTERS.indexOf( s.charAt( i ) );
return h;
1 resposta
solução!

Feito!

public class Main{

    private static final String LETTERS = "acdegilmnoprstuw";
    private static final int HASH = 7;
    private static final int FACTOR = 37;

    public static void main(String[] args) {
        System.out.println("Retirando o hash: " + tiraHash(695527946727l));
        System.out.println("Pegando o hash: " + getHash("segredo"));
    }
    public static String tiraHash(long n) {
        String result = "";
        while (n > 7) {
            result = LETTERS.charAt((int) (n % 37)) + result;
            n = n / 37;
        }
        return result;
    }

    private static long getHash(String s) {
        long h = HASH;
        int len = s.length();

        for (int i = 0; i < len; i++) {
            h = h * FACTOR + LETTERS.indexOf( s.charAt( i));    
        }
        return h;
    }
}