thorish
Version:
This is a library of useful JS concepts and data structures for Node and the browser. It it, unashamedly, a dumping ground for code needed by [@samthor](https://twitter.com/samthor)'s projects.
97 lines (96 loc) • 3.48 kB
TypeScript
/**
* Returns a random signed int32, from the crypto lib via a pool.
*
* This is on par with {@link Math.random} rather than being significantly faster.
* It has a 'startup cost' which makes benchmarking hard, and seems to get faster the more numbers you request.
*/
export declare const randInt32: () => number;
/**
* Returns a basic hash of the string or {@link ArrayLike}.
*/
export declare function hashCode(s: string | ArrayLike<number>): number;
/**
* Returns a basic hash of the given string based on its UTF-16 parts only. Empty string is zero.
*/
export declare function hashCodeString(s: string): number;
/**
* Returns a basic hash of the given array-like. Empty is zero.
*/
export declare function hashCodeArray(s: ArrayLike<number>): number;
/**
* Choose a random item from the {@link ArrayLike}.
*/
export declare function randomArrayChoice<X>(arr: ArrayLike<X>): X | undefined;
/**
* Pick a random item from the passed {@link Iterable}. Consumes the entire iterable.
*/
export declare function randomPick<X>(iter: Iterable<X>): X | undefined;
/**
* Picks a random N items from the passed {@link Iterable}. Consumes the entire iterable.
*/
export declare function randomPickN<X>(iter: Iterable<X>, count: number): X[];
/**
* Lerp between low/high at the given position.
*/
export declare function lerp(low: number, high: number, at: number): number;
/**
* Finds the position (normally 0-1) between low-high.
*
* Will return `Infinity` if low and high are the same.
*/
export declare function inverseLerp(low: number, high: number, value: number): number;
/**
* Returns a random number in the given range.
* This is the same semantics as {@link Math.random()}.
*/
export declare function randomRange(a: number, b?: number): number;
/**
* Returns a random integer number in the given range.
* If only a single number is given, treated as `[0,n)`.
* If two numbers are given, treated as `[a,b)`, regardless of relative order.
*
* For example:
* - `(10)` can give values 0 through 9.
* - `(1, 6)` can give values 1 through 5.
* - `(0, -4)` can give values 0 through -3.
* - `(-4, 0)` can give values -4 through -1.
*
* Same values always return that value.
*
*/
export declare function randomRangeInt(a: number, b?: number): number;
/**
* Clamps a number between low and high.
*/
export declare const clamp: (low: number, high: number, number: number) => number;
/**
* Skews a value from a prior range to a new range.
*/
export declare const skew: (from: {
low: number;
high: number;
}, to: {
low: number;
high: number;
}, value: number) => number;
/**
* Generates seeded, random 32-bit numbers between `[-2147483648,2147483647]` (i.e., `[-2^31,(2^31)-1]`).
*
* The seed must be an integer, if a float is passed, only the integer part is used (e.g., `0.5`
* becomes `0`).
*
* The best use is to clip these numbers with a mask, e.g., `gen() & 0xffff` for 16-bit.
*/
export declare function seeded32(s: number): () => number;
/**
* Generates seeded `Math.random()` behavior (i.e., >=0 and <1). Requires integer seed, just like
* {@link seeded32}.
*/
export declare function seededRand(s: number): () => number;
/**
* Returns a random 36-alphabet string (0-9, a-z) for use as a random identifier.
*
* By default, generates a 6-character long ID, which is ~31 bits. The bits are linear with length;
* each character is ~5.15 bits worth.
*/
export declare function randomId(length?: number): string;