Acertijo

Daniel Garcia dani en danigm.net
Mie Oct 22 10:39:58 CEST 2008


El mar, 21-10-2008 a las 21:12 +0200, Arnau Sanchez escribió:
> 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.

No creo, seguramente en mi código haya alguna condición de más.

> 
> 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.

Sí, esta es.

> 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

Estudiaré el código

------------ 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