Python - Cuadrado de Polibio

 
Vista:
sin imagen de perfil

Cuadrado de Polibio

Publicado por Alfredo (6 intervenciones) el 06/11/2021 23:17:47
Estaría necesitando crear una función que me permita encriptar y desencriptar una frase en un cudaro de polibio.
ya trata varias formas de hacerlo o buscarlo pero no sale ninguno funcional
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 2.808
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Cuadrado de Polibio

Publicado por tincopasan (1082 intervenciones) el 07/11/2021 00:16:21
Es muy simple, solo se necesita un diccionario, donde cada letra tendrá un valor númerico asociado, en el original no existen los espacios, ñ ni signos de puntuación, pero se pueden agregar sin ningún problema. En resumen para cifrar lees una cadena de caracteres y mostrás la representaciín númerica, y para descifrar lees una cadena numérica, tomás cada dos valores y mostrás la cedana resultante. ¿qué llevás hecho?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Cuadrado de Polibio

Publicado por Alfredo (6 intervenciones) el 07/11/2021 00:30:54
lookup_table = {'A' : 'Z', 'B' : 'Y', 'C' : 'X', 'D' : 'W', 'E' : 'V',
'F' : 'U', 'G' : 'T', 'H' : 'S', 'I' : 'R', 'J' : 'Q',
'K' : 'P', 'L' : 'O', 'M' : 'N', 'N' : 'M', 'O' : 'L',
'P' : 'K', 'Q' : 'J', 'R' : 'I', 'S' : 'H', 'T' : 'G',
'U' : 'F', 'V' : 'E', 'W' : 'D', 'X' : 'C', 'Y' : 'B', 'Z' : 'A'}

def atbash(message):
cipher = ''
for letter in message:
if(letter != ' '):
cipher += lookup_table[letter]
else:
cipher += ' '

return cipher
def main():
message = 'Firma la paz'
print(atbash(message.upper()))
message = 'urinz oz kza'
print(atbash(message.upper()))

if __name__ == '__main__':
main()

este es un codigo que use para otro problema pero por lo que decis solo basta con modificar la tabla agregando los números correspondientes a cada letra no?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Cuadrado de Polibio

Publicado por Alfredo (6 intervenciones) el 07/11/2021 01:41:05
lookup_table = {'A' : '11', 'B' : '12', 'C' : '13', 'D' : '14', 'E' : '15',
'F' : '21', 'G' : '22', 'H' : '23', 'I' : '24', 'J' : '24',
'K' : '25', 'L' : '31', 'M' : '32', 'N' : '33', 'O' : '34',
'P' : '35', 'Q' : '41', 'R' : '42', 'S' : '43', 't' : '44',
'U' : '45', 'V' : '51', 'W' : '52', 'X' : '53', 'Y' : '54', 'Z' : '55'}

def atbash(message):
cipher = ''
for letter in message:
if(letter != ' '):
cipher += lookup_table[letter]
else:
cipher += ' '
return cipher

def main():
message = 'deseamos la paz'
print(atbash(message.upper()))
message = '1415431511323443 3111 35115555'
print(atbash(message.upper()))

if __name__ == '__main__':
main()

No sabria como cambiar el código para desencriptar
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 2.808
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Cuadrado de Polibio

Publicado por tincopasan (1082 intervenciones) el 07/11/2021 03:48:33
OK, hay muchas formas de hacerlo, en base a tu código y con pequeñas modificaciones lo haría así:
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
#-*- coding:utf-8 -*-
lookup_table = {'A' : '11', 'B' : '12', 'C' : '13', 'D' : '14', 'E' : '15',
'F' : '21', 'G' : '22', 'H' : '23', 'I' : '24', 'J' : '24',
'K' : '25', 'L' : '31', 'M' : '32', 'N' : '33', 'O' : '34',
'P' : '35', 'Q' : '41', 'R' : '42', 'S' : '43', 't' : '44',
'U' : '45', 'V' : '51', 'W' : '52', 'X' : '53', 'Y' : '54', 'Z' : '55'}
 
def atbash(message):
    cadena="".join(message.split())
    cipher = ''
    if cadena.isalpha():
        for letter in message.upper():
            if letter != ' ':
                cipher += lookup_table[letter]
            else:
                cipher += ' '
    else:
        list_of_key = list(lookup_table.keys())
        list_of_value = list(lookup_table.values())
        texto = "00".join(message.split())
        sep = []
        for i in range(0,len(texto),2):
            sep.append(texto[i:i+2])
        for x in sep:
            if x != "00":
                position = list_of_value.index(x)
                cipher+= "".join(list_of_key[position])
            else:
                cipher+= " "
    return cipher
 
def main():
    message1 = 'deseamos la paz'
    message2 = '1415431511323443 3111 351155'
    print(atbash(message1))
    print(atbash(message2))
 
if __name__ == '__main__':
    main()

Por supuesto que no implementé manejo de errores, ni posibles variantes, pero quizá te sirva como ejemplo para que lo adaptes y termines.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Cuadrado de Polibio

Publicado por Alfredo (6 intervenciones) el 07/11/2021 03:52:24
Mil Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar