Code Monkey home page Code Monkey logo

hashing-proscai's Introduction

Reto Hash

Proscai - 12/04/2022

Diego Aragon Duarte

Análisis

Antes de iniciar el problema, me tome un momento para analizar el planteamiento y cuales eran nuestros datos para conocer el resultado solicitado, para este caso necesitábamos conocer el para recibido a través de la función " hash", sabemos que debe contener un string y este string debe constar de 10 caracteres entre los cuales pueden repetirse u omitirse y darnos el resultado de " 290460476046687".

Así que una vez sabido esto, analice la función hash un momento en la cual contamos con la variable " seed", la cual se está inicializando con un valor de 47 y es una variable mutable, dentro de la cual esta semilla estará dentro de una iteración por cada carácter de la palabra ingresada, donde nos da una fórmula en la cual el valor de la " seed" se multiplica por " 19" y se suma con la distancia entre dos índice la cual es el primer índice del parámetro ingresado hasta el último índice de la iteración, lo cual nos da una variación entre [893…905] dependiendo del carácter iterado.

Resolución

Una vez conocido la entrada a enviar, cree un script de playground, me puse a probar y conocer los valores de cada uno de los caracteres permitidos dentro de " diccionario", por lo cual cree una pequeña función para calcular cada una de las entradas, ya que contamos con 13 caracteres dentro del diccionario y el resultado requeridos es de 10 caracteres por lo cual en este número nos da las combinaciones posibles de " 137858491849" por lo cual la mejor práctica es mapear entre todas las combinaciones posibles el resultado de palabras que nos de el numero solicitado al inicio del ejercicio, pero aquí viendo el total de combinaciones posibles, el total de procesos que debe completar una función para tener las permutaciones y que no soy un experto en permutaciones decidí probar por medio de " hardcoding" ir probando el patrón para llegar al resultado, digamos que pasaba a la función " hash" la cadena de " aaaaaaaaaa" los resultados de cada iteración se mantenían al mismo valor, pero si en la cadena cambiábamos un carácter " aaaaaaaaab" ya había una variación de [893 - 894] ya que entre un carácter fuera diferente al siguiente ya había un cambio exponencial del valor de cada iteración entre 1.2x a 2x del valor anterior.

Entonces ahí deduje que debe haber una variación entre las últimas letras del diccionario y las primeras letras para tener una variación exponencial en el valor total que retorne nuestra función de hash.

Por lo cual fui probando palabras que puedan tener 10 caracteres con variación entre las primeras y últimas palabras, así que fui agregando letra por letra para ir teniendo el acumulado total deseado, hasta llegar al resultado con la palabra " perseverar".

En donde mi forma de resolverlo no fue la manera más práctica pero el ejercicio tenía un poco de tricky, ya que teniendo en cuenta todas las posibilidades de combinaciones y que cualquier dispositivo llegaría a bloquear el procesador con tantas ejecuciones hasta llegar al resultado deseado, entonces mi forma de resolverlo fue de la manera lógica matemática, sumando cada carácter entre las variaciones exponenciales hasta ir llegando a resultados similares y variando letras para darme el resultado final.

Tiempo total: 21 minutos.

hashing-proscai's People

Watchers

Diego Aragón avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.