Python Challenge: Niveles 0-6

Python Challenge es una página con retos a resolver utilizando Python. Es posible resolverlos utilizando otros lenguajes, aunque la finalidad del juego es aprender más sobre librerías y funcionalidades específicas de Python.

En este post voy a enseñar las soluciones a los 7 primeros niveles de este Challenge. Conforme siga avanzando, publicaré las soluciones a niveles posteriores. Puedes encontrar el código de las soluciones en Github.

Nivel 0: Warming up

Este es un nivel bastante sencillo, en el que sólo tendrás que calcular la potencia que se muestra en la imagen, y sustituir en la URL el 0 por el valor de esta.

Nivel 1: What about making trans?

De nuevo, un nivel muy sencillo, en el que el propio título de la página nos dice qué hacer. Nos dan un texto cifrado por rotación, y qué rotación tenemos que hacer, usando maketrans para solucionarlo. Al hacerlo, obtenemos este texto:

i hope you didnt translate it by hand. thats what computers are for. doing it in by hand is inefficient and that's why this text is so long. using string.maketrans() is recommended. now apply on the url.

Hacemos el mismo maketrans sobre la URL, y llegamos al siguiente nivel.

Nivel 2: OCR

El propio nivel nos dice que miremos el código fuente. Lo miramos y encontramos dos comentarios, el primero de ellos:

find rare characters in the mess below:

Justo después, encontramos una masa de caracteres sin sentido. Nos quedamos sólo con las letras de la masa, y obtenemos la clave para el siguiente nivel.

Nivel 3: Re

La pista nos sugiere que busquemos una letra minúscula, rodeada de exactamente 3 letras mayúsculas a cada lado. Utilizando expresiones regulares hacemos la búsqueda [^A-Z][A-Z]{3}([a-z])[A-Z]{3}[^A-Z] y encontramos unas cuantas letras, que juntas forman la solución a este nivel.

Nivel 4: Follow the chain

Al hacer click en la imagen, llegamos a una página terminada en ?nothing=12345 con el siguiente texto:

and the next nothing is 44827

Al cambiar el número en la URL, llegamos a otra página igual, que de nuevo apunta a otro número distinto. Parece que podríamos llevarnos así todo el día, por lo que habrá que hacer uso de una librería de peticiones HTTP, como es el caso de urllib (incluida en Python) o requests.

Por medio de la navegación nos encontraremos que hay que dividir entre 2 uno de los códigos. Quitando esto el nivel no tiene mayor complicación, seguimos 250 páginas y llegaremos al enlace al siguiente nivel.

Nivel 5: Peak hell

La pista es que pronunciemos el título del nivel, que suena sospechosamente parecido a Pickle, la librería de serialización de objetos en Python.

En el código fuente encontramos un archivo pickle. Al importarlo y examinarlo un poco, se ve que es una lista de líneas de un texto. Cada línea, en vez de ser una lista de caracteres, es una lista de pares (carácter, repeticiones). Al reconstruir el texto, obtenemos un bonito ASCII art:

ASCII art solución al nivel 5 del Python Challenge

Nivel 6: Now there are pairs

Este problema es bastante parecido al 4. Nos muestran una imagen de una cremallera (zip en inglés), y al cambiar la extensión de la imagen de png a zip, encontramos un archivo comprimido con muchos archivos txt y un readme, que reza:

welcome to my zipped list.
hint1: start from 90052
hint2: answer is inside the zip

Navegamos por los archivos del mismo modo que en el nivel 4, esta vez usando la librería zipfile, hasta llegar al final, que en este caso no es la solución, sino el texto "collect the comments".

Como en los archivos zip existe un campo de comentarios para los archivos, vamos guardando los comentarios de cada uno conforme navegamos. Al juntarlos todos, de nuevo obtenemos un mensaje en ASCII art.

En este caso, el ASCII art está pensado para despistar. La palabra que forma no es relevante, pero sí lo son los caracteres que forman las letras.

Puedes encontrar la solución a los siguientes niveles en el post con las soluciones de los niveles 7-14.

Sé el primero en comentar!