Namibian Pyjama Merchant
    Share your code. npm Orgs help your team discover, share, and reuse code. Create a free org »

    cellular-automatapublic

    cellular-automata

    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

    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

    install

    npm i cellular-automata

    Downloadslast 7 days

    9

    version

    1.2.0

    license

    MIT

    repository

    github.com

    last publish

    collaborators

    • avatar