viernes, 2 de diciembre de 2011

Puzzle (III de VI)

Bueno bueno... y aquí viene el tercer wargame, level 1...:P

Nos encontramos con el siguiente texto...


Este tiene ya más miga que no el resto...En el texto preguntan.. "¿Quien dijo...?" y al final nueve espacios en blanco, que suponemos es la solución, y lo que deberemos añadir a la url para pasar al siguiente nivel...

Como podemos ver, el texto tiene sus espacios, sus puntos y comas.. así que es de suponer.. que tan solo existe una transmutación entre las letras que aparecen y las originales. Es decir, tenemos que encontrar la correspondencia entre las letras, por tal de poder substituir cada una por su correspondiente original.

Dado que se trata de una página en inglés.. y que la frase, es de suponer que también lo estará.. el primer paso es realizar un estudio de la frecuencia que aparecen las letras.

http://en.wikipedia.org/wiki/Letter_frequency#Relative_frequencies_of_letters_in_the_English_language

El siguiente paso es coger y hacer un recuento de las letras que aparecen en el texto, así cómo un método para el cambio por las originales... sí, se puede hacer mediante folio y lápiz.. pero resulta demasiado coñ... tedioso. Así que, con un par de funciones de python es posible agilizar y facilitar esta tarea..

Para empezar, una función que nos haga el recuento de cada una de las letras que aparecen en la frase...:
(sustituir los _ por tabulaciones, que blogger no me deja meter el código..)
def cont(string):
_dic={}
_i=65
_while i<=90:
__dic[chr(i)]=string.count(chr(i))
__i=i+1
_return dic

Esta pequeña función, nos devuelve un diccionario con el número de veces que aparece cada letra. A continuación, otra función para hacer el cambio de letras, en función de otro diccionario que se encargue de las traducciones.

def subs(orig,trans):
_for i in trans.keys():
__orig=orig.replace(i,trans[i])
_print orig

Con estas dos pequeñas funciones definidas dentro del interprete de python, tan solo es necesario ir pasando las traducciones que creamos correctas, por tal de poder llegar a descifrar el mensaje.

Así pues, después de ir haciendo sustituciones.. nos queda el siguiente vector de traducciones:

trans= {'A': 'o', 'C': 'p', 'B': 't', 'E': 'l', 'D': 'a', 'G': 'h', 'F': 'u', 'I': 'i', 'K': 'm', 'J': 'b', 'M': 'j', 'L': 'c', 'N': 'd', 'Q': 'n', 'P': 'e', 'S': 'r', 'R': 'v', 'U': 'k', 'T': 'f', 'W': 'w', 'V': 's', 'X': 'y', 'Z': 'g'}

Así que dejo como ejercicio el acabar de juntar las partes, y descubrir que presidente dijo la frase...

No hay comentarios:

Publicar un comentario