alchemy: jugando a ser dios (ó cómo hacer trampa con Python)

Creo que esto de usar Python para hacer trampa se me está volviendo vicio. Es que hay veces que las cosas te piden a gritos que tomes un atajo. Y esto fue lo que me pasó esta semana.

Primero un poco de contexto. La semana pasada conocí, a través de Microsiervos, un juego llamado Alchemy. Consiste en combinar los cuatro elementos clásicos griegos (tierra, agua, fuego y aire) para generar nuevos elementos y a su vez, otros con estos.

Se los comenté a varios conocidos y se engancharon. El tope (al menos de momento) es 200 elementos y, como se trata de un juego muy divertido y adictivo, en un tiempo razonable se puede superar los 100. Los elementos son cada vez más complejos, incluso uno se empieza a obsesionar con la idea de crear human :P

El problema llega cuando uno se estanca y la tentación de hacer trampa se hace inevitable.

Atención: a partir de este momento el post es una especie de spoiler en donde se explica cómo llegar al final del juego sin jugarlo. Si estás jugándolo y lo disfrutas, deja de leer inmediatamente.

Con mirar rápidamente el código de la página, uno puede descubrir cómo funciona. Parece haber un archivo en donde se definen las relaciones de los elementos por un número identificador y otro donde está se mapean estos identificadores a nombres. El siguiente script me ayudó a organizar la información muy rápidamente:

Así, si quiero saber cómo obtener el elemento egg:

$ ./alchemy.py -g egg
egg = life + stone
egg = bird + bird
egg = turtle + turtle
egg = lizard + lizard

Si quiero saber para que me pueden servir los elemetos dough y sea:
$ ./alchemy.py -f dough sea
bread = fire + dough
cookie = fruit + dough
ocean = water + sea
seaweed = plant + sea
beach = sand + sea
wave = wind + sea
tides = moon + sea
seasickness = sickness + sea
algae = plant + sea
horizon = sky + sea

Para obtener todas las combinaciones:
$ ./alchemy.py -g all
que da este listado. Me pareció interesante hacer algunos grafos con estos datos. Así se puede ver la sección local de light bulb:
./alchemy.py -c "light bulb" | dot -Tpng > light_bulb.png ; display light_bulb.png

Claro que también se puede hacer el grafo completo (si se tiene memoria y tiempo):
$ ./alchemy.py -c all | neato -Tpng > all.png ; display all.png
Así se genera una imagen enorme de la que se puede ver un fragmento a continuación (click acá para verla completa, son 13MB 12027x 13593).

Fue divertido, incluso cuando evidentemente no fui el primero en notar esto y basta con googlear un poco para conocer las soluciones. En lo personal, consideré parte del juego escribir el código que lo resuelve y lo usé de excusa para hacer algo con optparse, que lo tenía pendiente.

4 thoughts on “alchemy: jugando a ser dios (ó cómo hacer trampa con Python)”

Comments are closed.