Cifrado Escitala

Iniciado por Sanko, Agosto 26, 2013, 09:10:24 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Buenas, hoy les traigo mi solución a un reto de programación en You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login

Código: python
#Cifrado escitala en python - Sanko
#Reto cifrado escitala - udtools.net

# -*- coding: utf-8 -*-

from math import ceil

class cif_escitala():

def __init__(self):
self.table = []
self.main()

def main(self):
print "Escitala cipher Python\n"
self.text = raw_input("Write the text to encode|> ")
self.n_col = input("\nWrite the number of columns|> ")

if self.text != '' and self.n_col != '':
self.__encode(self.text, self.n_col)
self.__decode()

print "\nNumber of columns: %s" % self.n_col
print "Encoded: %s" % self.encoded
print "Decoded: %s" % self.decoded

def __encode(self, text, n_col):
longitud = len(self.text)
if longitud > self.n_col:
h = ceil(longitud / self.n_col)
while h:
self.table.append(self.text[:self.n_col])
self.text = self.text[self.n_col:]
h -= 1

self.table.append(self.text.ljust(self.n_col))
self.text = ''.join(map(''.join, zip(*self.table)))
else:
print "n_col is bigger than longitud"

self.encoded = self.text.rstrip()

def __decode(self):
self.decoded = self.__encode(self.encoded, ceil(len(self.encoded) / self.n_col))


cif_escitala()


Una imágen vale más que mil palabras :


Saludos
Sigueme en Twitter : @Sankosk
Estos nuevos staff no tienen puta idea XD