Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

n-dimensional-flood-fill

Package Overview
Dependencies
Maintainers
1
Versions
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

n-dimensional-flood-fill

A non-recursive, n-dimensional implementation of flood fill.

  • 1.0.0
  • latest
  • Source
  • npm
  • Socket score

Version published
Maintainers
1
Created
Source

n-dimensional-flood-fill

A non-recursive, n-dimensional implementation of flood fill.

Setup

Install the package.

npm install n-dimensional-flood-fill --save

Require the module.

var floodFill = require("n-dimensional-flood-fill");

Usage

Let's say we'd like to call the flood fill algorithm on a two-dimensional data structure.

// Some data structure that we'd like to flood fill.
var data = [
  [0, 0, 1],
  [0, 1, 1],
  [1, 1, 0]
];

// Define our getter for accessing the data structure.
var getter = function (x, y) {
  return data[y][x];
};

// Choose a start node.
var seed = [1, 1];

// Flood fill over the data structure.
var result = floodFill({
  getter: getter,
  seed: seed
});

// Get the flooded nodes from the result.
result.flooded

Flooded nodes are returned as a nested array of arguments:

[[1, 1], [2, 1], [2, 0], [1, 2], [0, 2]]

onFlood

You can call a function when a node is flooded with the 'onFlood' option.

It is important that you do not modifying the data structure that floodFill is iterating over. Instead, make a copy first:

var copy = data.slice(0);

floodFill({
  getter: getter,
  seed: seed,
  onFlood: function (x, y) {
    copy[y][x] = 5;
  }
});

The copied data structure would now look like this:

[
  [0, 0, 5],
  [0, 5, 5],
  [5, 5, 0]
];

n-dimensions

You can use floodFill in any number of dimensions:

var data = [0, 0, 1, 1, 0, 1];

var result = floodFill({
  getter: function (x) { return data[x]; },
  seed: [3]
});

result.flooded; // [[3], [2]];

The number of dimensions will be inferred from your seed.

Equivalence

If you're equivalence relation is more complicated, you can set it with the 'equals' option.

var data = [
  ["foo", "bar"],
  ["qux", "baz"]
];

// Flood cells start with the same letter.
var equals = function (a, b) {
  return a[0] === b[0];
};

var result = floodFill({
  getter: getter,
  seed: [1, 1],
  equals: equals
});

result.flooded; // [[1, 1], [1, 0]]

Boundaries

You can capture or call a function when a boundary between a flooded and non-flooded cell is reached.

This includes cells at the edges of your data structure.

var data = [0, 0, 1, 1, 1, 1, 1];

var result = floodFill({
  getter: function (x) { return data[x]; },
  seed: [3],
  onBoundary: function (x) {
    console.log(x, " is a boundary.");
  }
});

result.boundaries; // [[6], [2]]

Diagonals

By default, floodFill will not visit diagonal nodes.

If you started in the middle of the following data structure, the top-left node would not be included.

1 0 0
0 1 1
0 1 1

You can change this behaviour with the 'diagonals' option.

floodFill({
  getter: getter,
  seed: seed,
  diagonals: true
});

This will work for any number of dimensions.

Contribution

Please send a pull request or open an issue.

You should follow me on twitter.

Keywords

FAQs

Package last updated on 14 Dec 2014

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc