Research
Security News
Quasar RAT Disguised as an npm Package for Detecting Vulnerabilities in Ethereum Smart Contracts
Socket researchers uncover a malicious npm package posing as a tool for detecting vulnerabilities in Etherium smart contracts.
@thi.ng/random
Advanced tools
Pseudo-random number generators w/ unified API, distributions, weighted choices, ID generation
@thi.ng/random is a versatile library for generating random numbers and sequences. It provides various random number generators (RNGs) and utilities for creating random values, sequences, and distributions.
Basic Random Number Generation
This feature allows you to generate basic random numbers, both floating-point and integer values, using the default system RNG.
const { SYSTEM } = require('@thi.ng/random');
const rng = SYSTEM;
console.log(rng.float()); // Generates a random float between 0 and 1
console.log(rng.int()); // Generates a random integer
Seeded Random Number Generation
This feature allows you to create a seeded random number generator, which produces reproducible sequences of random numbers.
const { XsAdd } = require('@thi.ng/random');
const rng = new XsAdd(12345); // Seeded RNG
console.log(rng.float()); // Generates a reproducible random float
console.log(rng.int()); // Generates a reproducible random integer
Random Value Generation from Arrays
This feature allows you to randomly select values from an array, which is useful for shuffling or sampling data.
const { SYSTEM } = require('@thi.ng/random');
const rng = SYSTEM;
const arr = [1, 2, 3, 4, 5];
console.log(rng.choice(arr)); // Randomly selects an element from the array
Random Distributions
This feature allows you to generate random numbers from various statistical distributions, such as normal (Gaussian) distributions.
const { SYSTEM } = require('@thi.ng/random');
const rng = SYSTEM;
console.log(rng.norm(0, 1)); // Generates a random number from a normal distribution with mean 0 and standard deviation 1
random-js is a library for generating random numbers and values. It provides a variety of RNGs and utilities for creating random values, similar to @thi.ng/random. However, random-js focuses more on providing a simple API for common randomization tasks.
seedrandom is a library for seeded random number generation. It allows you to create reproducible random sequences by providing a seed. While it offers fewer utilities compared to @thi.ng/random, it is highly focused on the quality and reproducibility of random numbers.
chance is a library for generating random data for various purposes, including numbers, strings, and even entire objects. It offers a broader range of random data generation compared to @thi.ng/random, which is more focused on numerical randomization.
[!NOTE] This is one of 200 standalone projects, maintained as part of the @thi.ng/umbrella monorepo and anti-framework.
🚀 Please help me to work full-time on these projects by sponsoring me on GitHub. Thank you! ❤️
Pseudo-random number generators w/ unified API, distributions, weighted choices, ID generation.
[!IMPORTANT] In July 2024 this package was restructured and split-up to extract some features into smaller more focused packages:
This package provides the IRandom
interface and various (mostly seedable)
pseudo-random number generator implementations, incl. IRandom
wrappers for
Math.random()
(or other external PRNGs) and window.crypto
:
Partially ported from C implementations taken from c.thi.ng.
coin()
/ fairCoin()
pickRandom()
/ pickRandomKey()
randomBytes()
/ randomBytesFrom()
randomID()
weightedRandom()
/ weightedRandomKey()
uniqueIndices()
/ uniqueValuesFrom()
STABLE - used in production
Search or submit any issues for this package
yarn add @thi.ng/random
ESM import:
import * as rnd from "@thi.ng/random";
Browser ESM import:
<script type="module" src="https://esm.run/@thi.ng/random"></script>
For Node.js REPL:
const rnd = await import("@thi.ng/random");
Package sizes (brotli'd, pre-treeshake): ESM: 1.93 KB
Note: @thi.ng/api is in most cases a type-only import (not used at runtime)
18 projects in this repo's /examples directory are using this package:
Screenshot | Description | Live demo | Source |
---|---|---|---|
Self-modifying, animated typographic grid with emergent complex patterns | Demo | Source | |
Probabilistic color theme generator | Demo | Source | |
Interactive inverse FFT toy synth | Demo | Source | |
2D Bezier curve-guided particle system | Demo | Source | |
Basic hiccup-based canvas drawing | Demo | Source | |
Barnsley fern IFS fractal renderer | Demo | Source | |
k-means clustering visualization | Demo | Source | |
Randomized space-filling, nested grid layout generator | Demo | Source | |
Randomized 4-point 2D color gradient image generator | Demo | Source | |
Interactive pixel sorting tool using thi.ng/color & thi.ng/pixel | Demo | Source | |
Animated, iterative polygon subdivisions & visualization | Demo | Source | |
Procedural stochastic text generation via custom DSL, parse grammar & AST transformation | Demo | Source | |
Basic usage of thi.ng/rdom keyed list component wrapper | Demo | Source | |
Generative audio synth offline renderer and WAV file export | Demo | Source | |
Evolutionary shader generation using genetic programming | Demo | Source | |
Responsive & reactively computed stacked column layout | Demo | Source | |
thi.ng/rdom & thi.ng/rstream based quiz to guess thi.ng package names | Demo | Source | |
Game of Life implemented as WebGL2 multi-pass shader pipeline | Demo | Source |
import { Smush32 } from "@thi.ng/random";
const rnd = new Smush32(0xdecafbad);
// the following methods are available for all generators
// next uint (0 .. 2^32-1)
rnd.int()
// 4022849029
// next float [0.0 .. 1.0)
rnd.float()
// 0.2698542904737066
// next normalized float (w/ opt scale)
// [-scale .. +scale)
rnd.norm(100)
// 57.70723665079737
// next float in given interval [min .. max)
rnd.minmax(10, 20)
// 15.295951807707537
rnd.minmaxInt(10, 20)
If this project contributes to an academic publication, please cite it as:
@misc{thing-random,
title = "@thi.ng/random",
author = "Karsten Schmidt",
note = "https://thi.ng/random",
year = 2015
}
© 2015 - 2024 Karsten Schmidt // Apache License 2.0
FAQs
Pseudo-random number generators w/ unified API, distributions, weighted choices, ID generation
The npm package @thi.ng/random receives a total of 119,299 weekly downloads. As such, @thi.ng/random popularity was classified as popular.
We found that @thi.ng/random demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 0 open source maintainers collaborating on the project.
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.
Research
Security News
Socket researchers uncover a malicious npm package posing as a tool for detecting vulnerabilities in Etherium smart contracts.
Security News
Research
A supply chain attack on Rspack's npm packages injected cryptomining malware, potentially impacting thousands of developers.
Research
Security News
Socket researchers discovered a malware campaign on npm delivering the Skuld infostealer via typosquatted packages, exposing sensitive data.