npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

cellular-automata

v2.0.1

Published

Cellular automata runner, in arbirtrary dimensions.

Downloads

17

Readme

cellular-automata

Build Status NPM version

Installing and testing

With npm do:

npm install cellular-automata

To run the test suite, run the following command from the cellular-automata directory:

npm test

Features

  • Doesn't have any dependency to the DOM.
  • Can easily apply different successive rules.
  • Can be used in any dimension (1D, 2D, 3D and more).
  • Allow the cellular automata rules to be passed as a string in one of several common CA rule format, see cellular-automata-rule-parser.

Usage

Code

var CellularAutomata = require('cellular-automata');

// create a cellular automata with width of 200 cells and a height of 80 cells
var cellularAutomata = new CellularAutomata([200, 80]);

// fill the array with 95% of 0 values and 5% of 1 values
cellularAutomata.fillWithDistribution([[0, 95], [1, 5]]);

// define that the value out of the array should be interpreted as 0 values
cellularAutomata.setOutOfBoundValue(0);

cellularAutomata.setRule('23/3').iterate(5); // apply 5 times the S23/B3 rule (conway's life)
cellularAutomata.setRule('135/17').iterate(3); // apply 3 times the S135/B17 rule
cellularAutomata.setRule('234/12345678').iterate(5); // apply 5 times the S234/B12345768 rule

console.log(cellularAutomata.array); // ndarray containing the result

Result as an image

Code

// create a cellular automata with width of 75 cells and a height of 75 cells
var cellularAutomata = new CellularAutomata([75, 75]);

// use the fluent interface and the shortcut method "apply"
cellularAutomata
    .setOutOfBoundValue(1)
    .apply('23/3', 16)
    .apply('23456/45678', 16)
    .apply('23456/478', 16);

console.log(cellularAutomata.array); // ndarray containing the result

Result as an image

Public API

Constructor

new CellularAutomata(shape[, defaultValue = 0])

  • shape : Shape of the grid (ie: [800,600] for a 2d grid of 800 cells of width and 600 cells of height).
  • defaultValue : Default value of the cells.

Methods

All methods are chainable

setOutOfBoundValue([outOfBoundValue = 0])

Define the value used for the neighbours out of the array's bounds.

  • outOfBoundValue : The value to use, either an integer, the string "wrap" to enable grid wrapping or the string "clamp" to use the nearest in-bound cell.

setRng([rng = null])

Set the random number generation function used internally.

  • rng : A function to use as random number generator, defaults to Math.random.

fillWithDistribution(distribution[, rng = null])

Fill the grid with a given distribution.

  • distribution : An array of two dimensions representing the distribution to fill the grid with. (ie: [[0,90], [1,10]] for 90% of 0 and 10% of 1). Null values are ignored.
  • rng : A function used as random number generator, defaults to the internal RNG function.

setRule(rule[, neighbourhoodType[, neighbourhoodRange = 1]])

Define the rule of the cellular automata and the neighbourhood to be used.

  • rule : Either a valid rule string (see cellular-automata-rule-parser) or a function taking as arguments the value of the current cell and an array containing the values of all its neighbours.
  • neighbourhoodType : Neighbourhood type (moore, von-neumann, axis, corner, edge or face), only used when the rule is a function.
  • neighbourhoodRange : Neighbourhood range, only used when the rule is a function.

iterate([iterations = 1])

Apply the previously defined CA rule multiple times.

  • iteration : Number of iterations.

apply(rule[, iterations = 1[, neighbourhoodType[, neighbourhoodRange = 1]]])

Apply a given rule for a given number of iterations, shortcut method for setRule and iterate.

  • rule : Either a valid rule string (see cellular-automata-rule-parser) or a function taking as arguments the value of the current cell and an array containing the values of all its neighbours.
  • iteration : Number of iterations.
  • neighbourhoodType : Neighbourhood type (moore, von-neumann, axis, corner, edge or face), only used when the rule is a function.
  • neighbourhoodRange : Neighbourhood range, only used when the rule is a function.

Properties

shape

The shape of the grid.

dimension

The dimension of the grid.

array

The ndarray containing all the current data in the grid.

Changelog

2.0.1 (2019-09-28) :

  • Update dependencies.

2.0.0 (2019-04-19) :

  • Minor refactoring.
  • Reduce npm package size.
  • Update dependencies.
  • Add travis support.
  • Less direct support for older browser (now use const and let variable declarations).

1.2.0 (2016-03-22) :

  • Update the rule parser to support the extended stochastic rule format.
  • Add the method setRng() to set the internal RNG function.

1.1.0 (2016-03-09) :

  • Support for 'clamp' out-of-bound value.

1.0.1 (2016-01-24) :

  • Update the rule parser.

1.0.0 (2015-11-17) :

  • Better documentation.
  • The method fillWithDistribution now ignores null values.
  • Rename the properties currentArray to array and dimensions to dimension.
  • Remove the property defaultValue, the method switchArray and the method replace.
  • Declare stable.

0.1.0 (2015-11-02) :

  • Update the rule parser.
  • Supports unconventional neighbourhood types (axis, corner, edge and face).
  • Sort neighbourhood to allow position dependent rules.

0.0.3 (2015-10-17) :

  • Update the rule parser.

0.0.2 (2015-10-13) :

  • Update the rule parser.

0.0.1 (2015-10-04) :

  • First implementation.

Roadmap

  • More tests.

License

MIT

Learn more about cellular automata