Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/kdby-io/range-shuffle

Wide-range integer shuffler
https://github.com/kdby-io/range-shuffle

lcg random range shuffle

Last synced: about 1 month ago
JSON representation

Wide-range integer shuffler

Awesome Lists containing this project

README

        

# Range-Shuffle [![Build Status](https://img.shields.io/travis/pueue/range-shuffle.svg?style=flat-square)](https://travis-ci.org/pueue/range-shuffle) [![Version](https://img.shields.io/npm/v/range-shuffle.svg?style=flat-square)](https://www.npmjs.com/package/range-shuffle) [![Download](https://img.shields.io/npm/dt/range-shuffle.svg?style=flat-square)](https://www.npmjs.com/package/range-shuffle) [![Greenkeeper badge](https://badges.greenkeeper.io/pueue/range-shuffle.svg)](https://greenkeeper.io/)

Wide-range integer shuffler.

## Goals

- No array
- Reversible

## Getting Started

### Install

```sh
npm install --save range-shuffle
```

### Usage

```javascript
const Shuffler = require('range-shuffle');
// or
import Shuffler from 'range-shuffle';

const rs = new Shuffler({
MULTIPLIER: 7, // it must be a prime number
INCREMENT: 9,
MODULUS: 10,
});

const array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
const shuffled = array.map(int => rs.LCG(int));
// [9, 6, 3, 0, 7, 4, 1, 8, 5, 2]
const reversed = shuffled.map(int => rs.reverseLCG(int));
// [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
```

## Principle

[Linear congruential generator](https://en.wikipedia.org/wiki/Linear_congruential_generator)

## Note

All constants & method arguments can be both `Number` and `String` type.
If you want to use a large number over `Number.MAX_SAFE_INTEGER`(9007199254740991), use a `String` type input like `.LCG('9999999999999999')`.

## API

### `new Shuffler(constants)`

`constants` is a object that must contain **three constants**:

- `MULTIPLIER`: Must be **a prime number**.
- `INCREMENT`
- `MODULUS`: Range for shuffling. `0 ~ (MODULUS - 1)`

### `.LCG(integer)`

Performs linear congruential generating based on constants.

### `.reverseLCG(integer)`

Restores linear congruential generating based on constants.