Buenas, hoy les traigo mi solución a un reto de programación en [Enlace externo eliminado para invitados]
#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 :
Imagen


Saludos
Responder

Volver a “Fuentes”