Smarter N-Puzzle
Este post fue migrado de un blog hecho con Wordpress. Si se ve mal, dejame un comentario y lo arreglo.
N-Puzzle sigue sin tener una real inteligencia, pero hice una modificación que lo hace verse un poco más inteligente:
Si un jugador o el desordenador aleatorio hace movimientos que se cancelan entre sí
<li>Izquierda - Derecha</li> <li>Izquierda - Izquierda - Derecha - Derecha</li> <li>Izquierda - Izquierda - Arriba - Arriba - Derecha - Izquierda - Abajo - Abajo - Derecha - Derecha</li>
el siguiente algoritmo es capás de eliminarlos de la lista de acciones y así lograr una resolución en menos movimientos y que parezca menos tonta.
El método que encapsula al algoritmo en cuestión es llamado cada vez que se entra al modo Auto Solve:
def _reduce_actions(self):
'''This method try to reduce the actions' log
removing repeted moves.'''
log = self.actions_log
stack = []
while log:
a = log.pop()
ia = self._inverse_action(a)
if stack:
s = stack.pop()
if ia != s:
stack += [s, a]
else:
stack += [a]
print "Stack: ", len(stack)
print "Log: ", len(log)
stack.reverse()
self.actions_log = stack
Download last version: n-puzzle-0.1-2
Comentarios
Comments powered by Disqus