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