Socket
Socket
Sign inDemoInstall

cellular-automata

Package Overview
Dependencies
7
Maintainers
1
Versions
10
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    cellular-automata

Cellular automata runner, in arbirtrary dimensions.


Version published
Weekly downloads
10
increased by400%
Maintainers
1
Install size
96.1 kB
Created
Weekly downloads
 

Readme

Source

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

Keywords

FAQs

Last updated on 28 Sep 2019

Did you know?

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

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc