Código de Python - Acertijo en Python

Imágen de perfil
Val: 8
Ha disminuido su posición en 3 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.588 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.589 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...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad

http://lwp-l.com/s5511