Acertijo

Arnau Sanchez pyarnau en gmail.com
Mar Oct 21 21:12:56 CEST 2008


Daniel Garcia Moreno escribió:

> Hola, hace poco recibí un correo electrónico con un acertijo y me puse a
> implementar una solución en python, pero no he conseguido sacar la
> solución en un tiempo aceptable. Hice una implementación en Haskell que
> tarda sobre 20 minutos en resolverlo, pero en python tarda mucho más.
> 
> ¿Alguien sabe cómo resolverlo? Ya sea de manera funcional o
> procedimental.

He probado tu código, pero tras un buen rato corriendo me ha dicho '[]', 
seguramente hice algo mal.

En cualquier caso, en recuerdo a los viejos tiempos de instituto en que nos 
ponían problemas de este tipo (para hacerlos a mano), he preparado una posible 
solución:

http://tokland.freehostia.de/acertijo.py

$ time python acertijo.py
[['swedish', 'white', 5, 'dog', 'blue', 'beer'],
  ['german', 'green', 4, 'fish', 'prince', 'coffee'],
  ['english', 'red', 3, 'bird', 'pall', 'milk'],
  ['danish', 'blue', 2, 'horse', 'blends', 'tea'],
  ['norwegian', 'yellow', 1, 'cat', 'durn', 'water']]

real	0m2.339s
user	0m2.132s
sys	0m0.016s

¿Es ésa la solución? Tarda poco más de 2 segundos, pero sin duda se podría 
optimizar.

Diría que tú implementación va muy lenta porque tratas todas las pistas de la 
misma forma, cuando de hecho se pueden separar en dos: a) las que indican 
relaciones directas (las uso como estado inicial de la matriz, lo que ahorra 
muchas iteraciones) y b) las pistas relativas a la posición de las casas (esto 
sí que tiene que ser implementado por código).

La solución es funcional, excepto una asignación en la matriz (que se puede 
hacer funcional, pero no sería muy idiomático en Python)

Eso sí, código sin comentar, sin tests, en fin, un desastre :-p

arnau
------------ próxima parte ------------
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes


Más información sobre la lista de distribución Python-es