Underc0de

Programación Scripting => Python => Mensaje iniciado por: Sanko en Agosto 26, 2013, 09:10:24 PM

Título: Cifrado Escitala
Publicado por: Sanko en Agosto 26, 2013, 09:10:24 PM
Buenas, hoy les traigo mi solución a un reto de programación en UDT (http://foro.udtools.net/showthread.php?11042-Reto-Programaci%F3n-Sobre-cifrado-Esc%EDtala)

Código (python) [Seleccionar]
#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 :
(http://i.imgur.com/jmCmQpJ.png)

Saludos