Skip to content

Latest commit

 

History

334 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

soukoban

docs.rs Test status Code coverage

A library providing implementations of algorithms and data structures related to Sokoban.

Features

  • Solver
    • Search algorithms: Supports A*, IDA*, GBFS and BFS search.
    • Strategies: Supports quick, push-optimal, and move-optimal strategies.
  • Level
    • Zero-allocation lazy parsing: Parses levels lazily from an in-memory string without memory allocations except for level creation.
    • Lazy stream parsing: Parses levels lazily from a stream.
    • Map reconstruction: Reconstructs the map from the solution.
    • Canonicalization: Removes elements from the map that are not relevant to the solution.
    • RLE support: Enables loading of levels encoded in Run-Length Encoding (RLE) format.
    • Symmetry transformations: Supports rotating and flipping levels.
  • Actions
    • Reversal move handling: Automatically interprets reversal moves as undo actions.
    • Metrics calculation: Computes metrics such as box_lines, box_changes, pushing_sessions, and player_lines.
    • Symmetry transformations: Supports rotating and flipping action sequences mapping.
  • Pathfinding: Finds paths for box/player with support for different strategies.
  • Deadlock detection: Detects static deadlocks and freeze deadlocks.

Example

use std::str::FromStr as _;
use soukoban::{prelude::*, solver::*};

fn main() {
    // Create a sequence of actions from a LURD string
    let actions = Actions::from_str("R").unwrap();

    // Reconstruct the map from the actions
    let map = Map::with_actions(&actions).unwrap();

    // Print the reconstructed map
    //
    // #####
    // #@$.#
    // #####
    println!("{map}");

    // Search for a solution using A* algorithm
    let solution = Solver::new(map, Strategy::Quick)
        .search(Algorithm::AStar)
        .unwrap();

    // Verify the solution matches the original actions
    assert_eq!(solution, actions);
}

License

Licensed under either of

at your option.

The level files in the assets directory are licensed solely under their respective licenses, available in the LICENSE file in the directory.

About

A library provides the implementation of algorithms and data structures related to Sokoban.

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Used by

Contributors

Languages