Sokoban
type board = {
map : Tilemap.t;
col : int;
row : int;
moves : int;
pushes : int;
}
val start : Playground.number -> string list -> board
val step : board -> (int * int) -> board option
val solved : board -> bool
val tile : char -> Playground.shape
val player : Playground.shape
val of_xsb : string -> string list list
val to_xsb : string list list -> string
val trim : string list -> string list
val problems : string list -> string list
type solution =
| Moves of string
| Unsolvable
| Gave_up of int
val solve : ?max_positions:int -> string list -> solution