@remvst/path-finder
TypeScript icon, indicating that this package has built-in type declarations

2.0.4 • Public • Published

Path Finder

Generic path finder implementation. Can be used for paths but also for more general problems.

The best possible path is not guaranteed, but the path finder will try its best to find a path as quickly as possible.

Usage

Generic Problem Solving

const PathFinder = require('@remvst/path-finder');

// Prepare the path finder
const pf = new PathFinder({
    'hash': state => someUniqueString(state)
    'neighbors': state => neighborsOf(state),
    'heuristic': (state, target) => naiveDistanceBetween(state, target),
    'isTarget': (position, target) => equals(position, target),
    'distance': (positionA, positionB) => actualDistanceBetween(positionA, positionB)
});

// Find a path
const result = pf.findPath(
    [possibleSource1, possibleSource2],
    myTarget
);

if (result.found) {
    console.log(result.steps); // path.steps is the list of states to reach the target
}

Maze

const maze = [
    [0, 0, 1, 0, 0, 0, 1, 0],
    [0, 0, 1, 0, 1, 0, 1, 0],
    [0, 0, 1, 0, 1, 0, 1, 0],
    [0, 0, 1, 0, 1, 0, 1, 0],
    [0, 0, 0, 0, 1, 0, 1, 0]
];

function newCell(row, col) {
    return {'row': row, 'col': col};
}

const pf = new PathFinder({
    'hash': position => position.row + '-' + position.col,
    'neighbors': position => {
        return [
            newCell(position.row + 1, position.col),
            newCell(position.row, position.col - 1),
            newCell(position.row, position.col + 1),
            newCell(position.row - 1, position.col)
        ].filter(position => {
            return position.row >= 0 && position.col >= 0 && position.row < maze.length && position.col < maze[0].length;
        }).filter(position => {
            return maze[position.row][position.col] === 0;
        });
    },
    'heuristic': (position, target) => {
        return Math.abs(position.row - target.row) + Math.abs(position.col - target.col);
    },
    'isTarget': (position, target) => {
        return position.row === target.row && position.col === target.col;
    },
    'distance': (positionA, positionB) => {
        return Math.abs(positionA.row - positionB.row) + Math.abs(positionA.col - positionB.col);
    }
});

const result = pf.findPath(
    [newCell(0, 0)],
    newCell(4, 5)
);

if (result.found) {
    console.log(result.steps); // path.steps is the list of states to reach the target
}

/@remvst/path-finder/

    Package Sidebar

    Install

    npm i @remvst/path-finder

    Weekly Downloads

    2

    Version

    2.0.4

    License

    UNLICENSED

    Unpacked Size

    19.4 kB

    Total Files

    9

    Last publish

    Collaborators

    • remvst