0votos

Resolver Sokoban en Haskell

por josejuan hace 6 años

El problema es NP-hard, por tanto hay que usar heurísticas para obtener rendimientos aceptables. Haciendo uso de la implementación del problema original y aplicando backtracking directo, la solución en Haskell que pongo no es eficiente (hace falta heurística).

Resolver de forma automática un sokoban. Sugiero tomar como base la solución escrita para el problema "Kata TDD. Sokoban (el juego) en Haskell" propuesto por Javier.

1
2
3
4
5
6
7
8
9
solveGame g@(Game r []) = [] 
solveGame g@(Game r ((_, m):ms)) = 
  if not (End `elem` m) 
    then [g] 
    else concatMap (\d -> solveGame (d g)) [goDown, goRight, goUp, goLeft] 
 
 
-- Para ver el código completo con helpers y tal aquí: 
--       https://gist.github.com/3895881 
3 comentarios
0votos

Escrito por josejuan hace 6 años

La función "solveGame" devuelve la lista de TODAS las formas posibles de solucionar el puzzle.
0votos

Escrito por Javier J. hace 6 años

Gracias JoseJuan, a ver si así me inspiro y retomo la solución que dejé a medias en Java.

Comenta la solución

Tienes que identificarte para poder publicar tu comentario.