Código de Python - Acertijo en Python

Imágen de perfil
Val: 10
Ha disminuido su posición en 16 puestos en Python (en relación al último mes)
Gráfica de Python

Acertijo en Pythongráfica de visualizaciones


Python

Publicado el 4 de Septiembre del 2019 por Rodolfo
1.169 visualizaciones desde el 4 de Septiembre del 2019
Un amigo me puso este acertijo para que lo resolviera en una hora.

Quizá les parezca interesante. Es una función que genera un hash de una palabra y el objetivo es crear la función un_hash, para determinar la palabra a partir del hash generado.

Les recomiendo no mirar la función un_hash y tratar de resolverlo primero. Sería interesante ver como lo resuelven Uds.

Saludos,

Rodolfo

Requerimientos

python 2.x

1

Publicado el 4 de Septiembre del 2019gráfica de visualizaciones de la versión: 1
1.170 visualizaciones desde el 4 de Septiembre del 2019
estrellaestrellaestrellaestrellaestrella
estrellaestrellaestrellaestrella
estrellaestrellaestrella
estrellaestrella
estrella

# python
# >>> from hash import *
# >>> un_hash(hash('pydoof'))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#
## ejemplo ##
#
# python
# >>> from hash import *
# >>> un_hash(hash('pydoof'))
# 7 * 37 + 11
# 270 * 37 + 17
# 10007 * 37 + 2
# 370261 * 37 + 10
# 13699667 * 37 + 10
# 506887689 * 37 + 4
# 18754844497
# 18754844497 = 506887689 * 37 + 4
# 506887689 = 13699667 * 37 + 10
# 13699667 = 370261 * 37 + 10
# 370261 = 10007 * 37 + 2
# 10007 = 270 * 37 + 17
# 270 = 7 * 37 + 11
# 7 = 7
# 'pydoof'
# >>>
#
 
def hash(st):
    # numero inicial
    h = 7
    # letras base
    letters = 'acdefgilmnoprstuwy'
    # i = 1,2,3,4, hasta longitud de la palabra
    for i in range(len(st)):
        # multiplico el numero por 37       
        t = h * 37
        idx = letters.index(st[i])
        print(str(h) + ' * 37 + ' + str(idx) ) + ' = ' + str(t+idx)
        h = t
        # le sumo el indice de la letra [i] de la palabra, en letters 
        h = h + idx
    print(str(h))
    return h
 
def un_hash(h):
    # letras base
    letters = 'acdefgilmnoprstuwy'
    # inicializo con la palabra vacia
    word = ''
    # mientras h no es el numero inicial
    while h != 7:
        # divido el numero por 37
        # al dividir me queda en h el numero siguiente, que es el cociente
        # en i el resto de la division que es
        # el indice de la letra en letters
        t = h
        # (h, i) = divmod(h, 37) 
        (h, i) = (h // 37, h % 37)
        # adiciono la letra al inicio de la palabra
        word = letters[i] + word
        print(str(t) + ' = ' + str(h) + ' * 37 + ' + str(i))
 
    print(str(h) + ' = ' + str(h))
    # devuelvo la palabra
    return word



Comentarios sobre la versión: 1 (0)


No hay comentarios
 

Comentar la versión: 1

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios
Es necesario revisar y aceptar las políticas de privacidad

http://lwp-l.com/s5511