@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
}

Readme

Keywords

none

Package Sidebar

Install

npm i @remvst/path-finder

Weekly Downloads

18

Version

2.0.4

License

UNLICENSED

Unpacked Size

19.4 kB

Total Files

9

Last publish

Collaborators

  • remvst