Smarter N-Puzzle

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í

  • Izquierda – Derecha
  • Izquierda – Izquierda – Derecha – Derecha
  • Izquierda – Izquierda – Arriba – Arriba – Derecha – Izquierda – Abajo – Abajo – Derecha – Derecha

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

About Juanjo

Mi nombre es Juanjo Conti, vivo en Santa Fe y soy Ingeniero en Sistemas de Información. Mi lenguaje de programación de cabecera es Python; lo uso para trabajar, estudiar y jugar. Como hobby escribí un libro de cuentos que se puede descargar gratuitamente.
This entry was posted in Aprendiendo Python, PyGame and tagged . Bookmark the permalink.