extra-rand 0.3.2 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +52 -66
- package/lib/index.d.ts +6 -7
- package/lib/index.js +6 -7
- package/lib/index.js.map +1 -1
- package/lib/native-random-number-generator.d.ts +1 -1
- package/lib/native-random-number-generator.js +1 -1
- package/lib/random-bool.js +4 -4
- package/lib/random-bool.js.map +1 -1
- package/lib/random-float.d.ts +3 -0
- package/lib/random-float.js +16 -0
- package/lib/random-float.js.map +1 -0
- package/lib/random-int-inclusive.js +4 -4
- package/lib/random-int-inclusive.js.map +1 -1
- package/lib/random-int.js +4 -4
- package/lib/random-int.js.map +1 -1
- package/lib/random-number.d.ts +17 -0
- package/lib/random-number.js +42 -0
- package/lib/random-number.js.map +1 -0
- package/lib/random-pick-index.d.ts +4 -0
- package/lib/random-pick-index.js +15 -0
- package/lib/random-pick-index.js.map +1 -0
- package/lib/random-pick-item.d.ts +4 -0
- package/lib/random-pick-item.js +16 -0
- package/lib/random-pick-item.js.map +1 -0
- package/lib/random-pick-weighted-index.d.ts +4 -0
- package/lib/random-pick-weighted-index.js +15 -0
- package/lib/random-pick-weighted-index.js.map +1 -0
- package/lib/random-pick-weighted-item.d.ts +7 -0
- package/lib/random-pick-weighted-item.js +17 -0
- package/lib/random-pick-weighted-item.js.map +1 -0
- package/lib/shuffle.js +2 -2
- package/package.json +2 -2
- package/src/index.ts +6 -8
- package/src/native-random-number-generator.ts +1 -1
- package/src/random-bool.ts +4 -4
- package/src/{random.ts → random-float.ts} +9 -9
- package/src/random-int-inclusive.ts +6 -6
- package/src/random-int.ts +6 -6
- package/src/random-number.ts +63 -0
- package/src/random-pick-index.ts +26 -0
- package/src/random-pick-item.ts +27 -0
- package/src/{random-index-by-weight.ts → random-pick-weighted-index.ts} +8 -8
- package/src/random-pick-weighted-item.ts +32 -0
- package/src/shuffle.ts +2 -2
- package/lib/map-to-index-by-weight.d.ts +0 -2
- package/lib/map-to-index-by-weight.js +0 -29
- package/lib/map-to-index-by-weight.js.map +0 -1
- package/lib/map-to-range.d.ts +0 -1
- package/lib/map-to-range.js +0 -6
- package/lib/map-to-range.js.map +0 -1
- package/lib/random-by-model.d.ts +0 -17
- package/lib/random-by-model.js +0 -42
- package/lib/random-by-model.js.map +0 -1
- package/lib/random-by-weight-model.d.ts +0 -8
- package/lib/random-by-weight-model.js +0 -16
- package/lib/random-by-weight-model.js.map +0 -1
- package/lib/random-index-by-weight.d.ts +0 -4
- package/lib/random-index-by-weight.js +0 -15
- package/lib/random-index-by-weight.js.map +0 -1
- package/lib/random-weighted.d.ts +0 -7
- package/lib/random-weighted.js +0 -17
- package/lib/random-weighted.js.map +0 -1
- package/lib/random.d.ts +0 -3
- package/lib/random.js +0 -16
- package/lib/random.js.map +0 -1
- package/src/map-to-index-by-weight.ts +0 -36
- package/src/map-to-range.ts +0 -9
- package/src/random-by-model.ts +0 -63
- package/src/random-by-weight-model.ts +0 -32
- package/src/random-weighted.ts +0 -32
package/README.md
CHANGED
|
@@ -15,13 +15,13 @@ interface IRandomNumberGenerator {
|
|
|
15
15
|
}
|
|
16
16
|
```
|
|
17
17
|
|
|
18
|
-
###
|
|
18
|
+
### randomFloat
|
|
19
19
|
```ts
|
|
20
|
-
function
|
|
21
|
-
function
|
|
20
|
+
function randomFloat(min: number, max: number): number
|
|
21
|
+
function randomFloat(generator: IRandomNumberGenerator, min: number, max: number): number
|
|
22
22
|
```
|
|
23
23
|
|
|
24
|
-
The function returns a
|
|
24
|
+
The function returns a float in the range `[min, max)`.
|
|
25
25
|
|
|
26
26
|
### randomInt
|
|
27
27
|
```ts
|
|
@@ -43,97 +43,83 @@ function randomIntInclusive(
|
|
|
43
43
|
|
|
44
44
|
The function returns an integer in the range `[Math.ceil(min), Math.floor(max)]`.
|
|
45
45
|
|
|
46
|
-
###
|
|
47
|
-
```ts
|
|
48
|
-
function randomBool(probabilityOfTrue: number): boolean
|
|
49
|
-
function randomBool(generator: IRandomNumberGenerator, probabilityOfTrue: number): boolean
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
### randomIndexByWeight
|
|
53
|
-
```ts
|
|
54
|
-
function randomIndexByWeight(weights: NonEmptyArray<number>): number
|
|
55
|
-
function randomIndexByWeight(
|
|
56
|
-
generator: IRandomNumberGenerator
|
|
57
|
-
, weights: NonEmptyArray<number>
|
|
58
|
-
): number
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
The function returns an index of one of weights.
|
|
62
|
-
|
|
63
|
-
### randomWeighted
|
|
64
|
-
```ts
|
|
65
|
-
interface IWeighted {
|
|
66
|
-
weight: number
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
function randomWeighted<T extends IWeighted>(values: NonEmptyArray<T>): T
|
|
70
|
-
function randomWeighted<T extends IWeighted>(
|
|
71
|
-
generator: IRandomNumberGenerator
|
|
72
|
-
, values: NonEmptyArray<T>
|
|
73
|
-
): T
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
### randomByWeightModel
|
|
77
|
-
```ts
|
|
78
|
-
type IWeightModel<T> = NonEmptyArray<{
|
|
79
|
-
weight: number
|
|
80
|
-
value: T
|
|
81
|
-
}>
|
|
82
|
-
|
|
83
|
-
function randomByWeightModel<T>(model: IWeightModel<T>): T
|
|
84
|
-
function randomByWeightModel<T>(generator: IRandomNumberGenerator, model: IWeightModel<T>): T
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
### randomByModel
|
|
46
|
+
### randomNumber
|
|
88
47
|
```ts
|
|
89
|
-
enum
|
|
48
|
+
enum NumberType {
|
|
90
49
|
Float
|
|
91
50
|
, Integer
|
|
92
51
|
, IntegerInclusive
|
|
93
52
|
}
|
|
94
53
|
|
|
95
|
-
type
|
|
54
|
+
type INumberModel =
|
|
96
55
|
| number
|
|
97
56
|
| Getter<number>
|
|
98
57
|
| {
|
|
99
|
-
type:
|
|
58
|
+
type: NumberType
|
|
100
59
|
min: number
|
|
101
60
|
max: number
|
|
102
61
|
}
|
|
103
62
|
| NonEmptyArray<{
|
|
104
63
|
weight: number
|
|
105
|
-
|
|
64
|
+
model: INumberModel
|
|
106
65
|
}>
|
|
107
66
|
|
|
67
|
+
function randomNumber(model: INumberModel): number
|
|
68
|
+
function randomNumber(generator: IRandomNumberGenerator, model: INumberModel): number
|
|
69
|
+
```
|
|
108
70
|
|
|
109
|
-
|
|
110
|
-
|
|
71
|
+
### randomBool
|
|
72
|
+
```ts
|
|
73
|
+
function randomBool(probabilityOfTrue: number): boolean
|
|
74
|
+
function randomBool(generator: IRandomNumberGenerator, probabilityOfTrue: number): boolean
|
|
111
75
|
```
|
|
112
76
|
|
|
113
|
-
###
|
|
77
|
+
### randomPickItem
|
|
114
78
|
```ts
|
|
115
|
-
function
|
|
116
|
-
function
|
|
79
|
+
function randomPickItem<T>(items: NonEmptyArray<T>): T
|
|
80
|
+
function randomPickItem<T>(
|
|
81
|
+
generator: IRandomNumberGenerator
|
|
82
|
+
, items: NonEmptyArray<T>
|
|
83
|
+
): T
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### randomPickWeightedItem
|
|
87
|
+
```ts
|
|
88
|
+
interface IWeightedItem {
|
|
89
|
+
weight: number
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
function randomPickWeightedItem<T extends IWeightedItem>(items: NonEmptyArray<T>): T
|
|
93
|
+
function randomPickWeightedItem<T extends IWeightedItem>(
|
|
94
|
+
generator: IRandomNumberGenerator
|
|
95
|
+
, items: NonEmptyArray<T>
|
|
96
|
+
): T
|
|
117
97
|
```
|
|
118
98
|
|
|
119
|
-
###
|
|
99
|
+
### randomPickIndex
|
|
120
100
|
```ts
|
|
121
|
-
function
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
,
|
|
101
|
+
function randomPickIndex(items: NonEmptyArray<unknown>): number
|
|
102
|
+
function randomPickIndex(
|
|
103
|
+
generator: IRandomNumberGenerator
|
|
104
|
+
, items: NonEmptyArray<unknown>
|
|
125
105
|
): number
|
|
126
106
|
```
|
|
127
107
|
|
|
128
|
-
|
|
108
|
+
The function returns an integer in the range `[0, items.length]`.
|
|
129
109
|
|
|
130
|
-
###
|
|
110
|
+
### randomPickWeightedIndex
|
|
131
111
|
```ts
|
|
132
|
-
function
|
|
133
|
-
|
|
134
|
-
|
|
112
|
+
function randomPickWeightedIndex(weights: NonEmptyArray<number>): number
|
|
113
|
+
function randomPickWeightedIndex(
|
|
114
|
+
generator: IRandomNumberGenerator
|
|
135
115
|
, weights: NonEmptyArray<number>
|
|
136
116
|
): number
|
|
137
117
|
```
|
|
138
118
|
|
|
139
|
-
|
|
119
|
+
The function returns an integer in the range `[0, weights.length]`.
|
|
120
|
+
|
|
121
|
+
### shuffle
|
|
122
|
+
```ts
|
|
123
|
+
function shuffle(arr: unknown[]): void
|
|
124
|
+
function shuffle(generator: IRandomNumberGenerator, arr: unknown[]): void
|
|
125
|
+
```
|
package/lib/index.d.ts
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
export * from './types.js';
|
|
2
|
-
export * from './random.js';
|
|
2
|
+
export * from './random-float.js';
|
|
3
3
|
export * from './random-int.js';
|
|
4
4
|
export * from './random-int-inclusive.js';
|
|
5
|
+
export * from './random-number.js';
|
|
5
6
|
export * from './random-bool.js';
|
|
6
|
-
export * from './random-
|
|
7
|
-
export * from './random-weighted.js';
|
|
8
|
-
export * from './random-
|
|
9
|
-
export * from './random-
|
|
7
|
+
export * from './random-pick-item.js';
|
|
8
|
+
export * from './random-pick-weighted-item.js';
|
|
9
|
+
export * from './random-pick-index.js';
|
|
10
|
+
export * from './random-pick-weighted-index.js';
|
|
10
11
|
export * from './shuffle.js';
|
|
11
|
-
export * from './map-to-range.js';
|
|
12
|
-
export * from './map-to-index-by-weight.js';
|
package/lib/index.js
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
export * from './types.js';
|
|
2
|
-
export * from './random.js';
|
|
2
|
+
export * from './random-float.js';
|
|
3
3
|
export * from './random-int.js';
|
|
4
4
|
export * from './random-int-inclusive.js';
|
|
5
|
+
export * from './random-number.js';
|
|
5
6
|
export * from './random-bool.js';
|
|
6
|
-
export * from './random-
|
|
7
|
-
export * from './random-weighted.js';
|
|
8
|
-
export * from './random-
|
|
9
|
-
export * from './random-
|
|
7
|
+
export * from './random-pick-item.js';
|
|
8
|
+
export * from './random-pick-weighted-item.js';
|
|
9
|
+
export * from './random-pick-index.js';
|
|
10
|
+
export * from './random-pick-weighted-index.js';
|
|
10
11
|
export * from './shuffle.js';
|
|
11
|
-
export * from './map-to-range.js';
|
|
12
|
-
export * from './map-to-index-by-weight.js';
|
|
13
12
|
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAE1B,cAAc,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAE1B,cAAc,mBAAmB,CAAA;AACjC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,2BAA2B,CAAA;AACzC,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA;AAChC,cAAc,uBAAuB,CAAA;AACrC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,wBAAwB,CAAA;AACtC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,cAAc,CAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { IRandomNumberGenerator } from './types.js';
|
|
2
|
-
export declare const
|
|
2
|
+
export declare const nativeRandomNumberGenerator: IRandomNumberGenerator;
|
package/lib/random-bool.js
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { nativeRandomNumberGenerator } from './native-random-number-generator.js';
|
|
2
|
+
import { randomFloat } from './random-float.js';
|
|
3
3
|
export function randomBool(...args) {
|
|
4
4
|
let generator;
|
|
5
5
|
let probabilityOfTrue;
|
|
6
6
|
if (args.length === 1) {
|
|
7
|
-
generator =
|
|
7
|
+
generator = nativeRandomNumberGenerator;
|
|
8
8
|
[probabilityOfTrue] = args;
|
|
9
9
|
}
|
|
10
10
|
else {
|
|
11
11
|
[generator, probabilityOfTrue] = args;
|
|
12
12
|
}
|
|
13
|
-
return
|
|
13
|
+
return randomFloat(generator, 0, 1) < probabilityOfTrue;
|
|
14
14
|
}
|
|
15
15
|
//# sourceMappingURL=random-bool.js.map
|
package/lib/random-bool.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"random-bool.js","sourceRoot":"","sources":["../src/random-bool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAA;AACjF,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"random-bool.js","sourceRoot":"","sources":["../src/random-bool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAA;AACjF,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAO/C,MAAM,UAAU,UAAU,CAAC,GAAG,IAEkC;IAE9D,IAAI,SAAiC,CAAA;IACrC,IAAI,iBAAyB,CAAA;IAE7B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,SAAS,GAAG,2BAA2B,CACtC;QAAA,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAA;IAC7B,CAAC;SAAM,CAAC;QACN,CAAC,SAAS,EAAE,iBAAiB,CAAC,GAAG,IAAI,CAAA;IACvC,CAAC;IAED,OAAO,WAAW,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,iBAAiB,CAAA;AACzD,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { remap } from 'extra-utils';
|
|
2
|
+
import { nativeRandomNumberGenerator } from './native-random-number-generator.js';
|
|
3
|
+
export function randomFloat(...args) {
|
|
4
|
+
let generator;
|
|
5
|
+
let min;
|
|
6
|
+
let max;
|
|
7
|
+
if (args.length === 2) {
|
|
8
|
+
generator = nativeRandomNumberGenerator;
|
|
9
|
+
[min, max] = args;
|
|
10
|
+
}
|
|
11
|
+
else {
|
|
12
|
+
[generator, min, max] = args;
|
|
13
|
+
}
|
|
14
|
+
return remap(generator.next(), [0, 1], [min, max]);
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=random-float.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"random-float.js","sourceRoot":"","sources":["../src/random-float.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAEnC,OAAO,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAA;AAQjF,MAAM,UAAU,WAAW,CAAC,GAAG,IAEgC;IAE7D,IAAI,SAAiC,CAAA;IACrC,IAAI,GAAW,CAAA;IACf,IAAI,GAAW,CAAA;IAEf,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,SAAS,GAAG,2BAA2B,CACtC;QAAA,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,CAAA;IACpB,CAAC;SAAM,CAAC;QACN,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,CAAA;IAC9B,CAAC;IAED,OAAO,KAAK,CACV,SAAS,CAAC,IAAI,EAAE,EAChB,CAAC,CAAC,EAAE,CAAC,CAAC,EACN,CAAC,GAAG,EAAE,GAAG,CAAC,CACX,CAAA;AACH,CAAC"}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { remap } from 'extra-utils';
|
|
2
|
+
import { nativeRandomNumberGenerator } from './native-random-number-generator.js';
|
|
3
3
|
export function randomIntInclusive(...args) {
|
|
4
4
|
let generator;
|
|
5
5
|
let min;
|
|
6
6
|
let max;
|
|
7
7
|
if (args.length === 2) {
|
|
8
|
-
generator =
|
|
8
|
+
generator = nativeRandomNumberGenerator;
|
|
9
9
|
[min, max] = args;
|
|
10
10
|
}
|
|
11
11
|
else {
|
|
12
12
|
[generator, min, max] = args;
|
|
13
13
|
}
|
|
14
|
-
return Math.floor(
|
|
14
|
+
return Math.floor(remap(generator.next(), [0, 1], [Math.ceil(min), Math.floor(max) + 1]));
|
|
15
15
|
}
|
|
16
16
|
//# sourceMappingURL=random-int-inclusive.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"random-int-inclusive.js","sourceRoot":"","sources":["../src/random-int-inclusive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"random-int-inclusive.js","sourceRoot":"","sources":["../src/random-int-inclusive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAEnC,OAAO,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAA;AAWjF,MAAM,UAAU,kBAAkB,CAAC,GAAG,IAEyB;IAE7D,IAAI,SAAiC,CAAA;IACrC,IAAI,GAAW,CAAA;IACf,IAAI,GAAW,CAAA;IAEf,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,SAAS,GAAG,2BAA2B,CACtC;QAAA,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,CAAA;IACpB,CAAC;SAAM,CAAC;QACN,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,CAAA;IAC9B,CAAC;IAED,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CACrB,SAAS,CAAC,IAAI,EAAE,EAChB,CAAC,CAAC,EAAE,CAAC,CAAC,EACN,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CACtC,CAAC,CAAA;AACJ,CAAC"}
|
package/lib/random-int.js
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { remap } from 'extra-utils';
|
|
2
|
+
import { nativeRandomNumberGenerator } from './native-random-number-generator.js';
|
|
3
3
|
export function randomInt(...args) {
|
|
4
4
|
let generator;
|
|
5
5
|
let min;
|
|
6
6
|
let max;
|
|
7
7
|
if (args.length === 2) {
|
|
8
|
-
generator =
|
|
8
|
+
generator = nativeRandomNumberGenerator;
|
|
9
9
|
[min, max] = args;
|
|
10
10
|
}
|
|
11
11
|
else {
|
|
12
12
|
[generator, min, max] = args;
|
|
13
13
|
}
|
|
14
|
-
return Math.floor(
|
|
14
|
+
return Math.floor(remap(generator.next(), [0, 1], [Math.ceil(min), Math.floor(max)]));
|
|
15
15
|
}
|
|
16
16
|
//# sourceMappingURL=random-int.js.map
|
package/lib/random-int.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"random-int.js","sourceRoot":"","sources":["../src/random-int.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"random-int.js","sourceRoot":"","sources":["../src/random-int.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAEnC,OAAO,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAA;AAQjF,MAAM,UAAU,SAAS,CAAC,GAAG,IAEkC;IAE7D,IAAI,SAAiC,CAAA;IACrC,IAAI,GAAW,CAAA;IACf,IAAI,GAAW,CAAA;IAEf,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,SAAS,GAAG,2BAA2B,CACtC;QAAA,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,CAAA;IACpB,CAAC;SAAM,CAAC;QACN,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,CAAA;IAC9B,CAAC;IAED,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CACrB,SAAS,CAAC,IAAI,EAAE,EAChB,CAAC,CAAC,EAAE,CAAC,CAAC,EACN,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAClC,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Getter, NonEmptyArray } from 'justypes';
|
|
2
|
+
import { IRandomNumberGenerator } from './types.js';
|
|
3
|
+
export declare enum NumberType {
|
|
4
|
+
Float = 0,
|
|
5
|
+
Integer = 1,
|
|
6
|
+
IntegerInclusive = 2
|
|
7
|
+
}
|
|
8
|
+
export type INumberModel = number | Getter<number> | {
|
|
9
|
+
type: NumberType;
|
|
10
|
+
min: number;
|
|
11
|
+
max: number;
|
|
12
|
+
} | NonEmptyArray<{
|
|
13
|
+
weight: number;
|
|
14
|
+
model: INumberModel;
|
|
15
|
+
}>;
|
|
16
|
+
export declare function randomNumber(model: INumberModel): number;
|
|
17
|
+
export declare function randomNumber(generator: IRandomNumberGenerator, model: INumberModel): number;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { isArray, isFunction, isNumber } from 'extra-utils';
|
|
2
|
+
import { randomFloat } from './random-float.js';
|
|
3
|
+
import { randomInt } from './random-int.js';
|
|
4
|
+
import { randomIntInclusive } from './random-int-inclusive.js';
|
|
5
|
+
import { nativeRandomNumberGenerator } from './native-random-number-generator.js';
|
|
6
|
+
import { randomPickWeightedItem } from './random-pick-weighted-item.js';
|
|
7
|
+
export var NumberType;
|
|
8
|
+
(function (NumberType) {
|
|
9
|
+
NumberType[NumberType["Float"] = 0] = "Float";
|
|
10
|
+
NumberType[NumberType["Integer"] = 1] = "Integer";
|
|
11
|
+
NumberType[NumberType["IntegerInclusive"] = 2] = "IntegerInclusive";
|
|
12
|
+
})(NumberType || (NumberType = {}));
|
|
13
|
+
export function randomNumber(...args) {
|
|
14
|
+
let generator;
|
|
15
|
+
let model;
|
|
16
|
+
if (args.length === 1) {
|
|
17
|
+
generator = nativeRandomNumberGenerator;
|
|
18
|
+
[model] = args;
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
[generator, model] = args;
|
|
22
|
+
}
|
|
23
|
+
if (isNumber(model)) {
|
|
24
|
+
return model;
|
|
25
|
+
}
|
|
26
|
+
else if (isFunction(model)) {
|
|
27
|
+
return model();
|
|
28
|
+
}
|
|
29
|
+
else if (isArray(model)) {
|
|
30
|
+
const item = randomPickWeightedItem(generator, model);
|
|
31
|
+
return randomNumber(generator, item.model);
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
const { type, min, max } = model;
|
|
35
|
+
switch (type) {
|
|
36
|
+
case NumberType.Float: return randomFloat(generator, min, max);
|
|
37
|
+
case NumberType.Integer: return randomInt(generator, min, max);
|
|
38
|
+
case NumberType.IntegerInclusive: return randomIntInclusive(generator, min, max);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=random-number.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"random-number.js","sourceRoot":"","sources":["../src/random-number.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAE9D,OAAO,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAA;AACjF,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAA;AAEvE,MAAM,CAAN,IAAY,UAIX;AAJD,WAAY,UAAU;IACpB,6CAAK,CAAA;IACL,iDAAO,CAAA;IACP,mEAAgB,CAAA;AAClB,CAAC,EAJW,UAAU,KAAV,UAAU,QAIrB;AAoBD,MAAM,UAAU,YAAY,CAAC,GAAG,IAE0B;IAExD,IAAI,SAAiC,CAAA;IACrC,IAAI,KAAmB,CAAA;IAEvB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,SAAS,GAAG,2BAA2B,CACtC;QAAA,CAAC,KAAK,CAAC,GAAG,IAAI,CAAA;IACjB,CAAC;SAAM,CAAC;QACN,CAAC,SAAS,EAAE,KAAK,CAAC,GAAG,IAAI,CAAA;IAC3B,CAAC;IAED,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACpB,OAAO,KAAK,CAAA;IACd,CAAC;SAAM,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,KAAK,EAAE,CAAA;IAChB,CAAC;SAAM,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,sBAAsB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;QACrD,OAAO,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;IAC5C,CAAC;SAAM,CAAC;QACN,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK,CAAA;QAChC,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,UAAU,CAAC,KAAK,CAAC,CAAC,OAAO,WAAW,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;YAC9D,KAAK,UAAU,CAAC,OAAO,CAAC,CAAC,OAAO,SAAS,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;YAC9D,KAAK,UAAU,CAAC,gBAAgB,CAAC,CAAC,OAAO,kBAAkB,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;QAClF,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { NonEmptyArray } from 'justypes';
|
|
2
|
+
import { IRandomNumberGenerator } from './types.js';
|
|
3
|
+
export declare function randomPickIndex(items: NonEmptyArray<unknown>): number;
|
|
4
|
+
export declare function randomPickIndex(generator: IRandomNumberGenerator, items: NonEmptyArray<unknown>): number;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { nativeRandomNumberGenerator } from './native-random-number-generator.js';
|
|
2
|
+
import { randomInt } from './random-int.js';
|
|
3
|
+
export function randomPickIndex(...args) {
|
|
4
|
+
let generator;
|
|
5
|
+
let items;
|
|
6
|
+
if (args.length === 1) {
|
|
7
|
+
generator = nativeRandomNumberGenerator;
|
|
8
|
+
[items] = args;
|
|
9
|
+
}
|
|
10
|
+
else {
|
|
11
|
+
[generator, items] = args;
|
|
12
|
+
}
|
|
13
|
+
return randomInt(generator, 0, items.length);
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=random-pick-index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"random-pick-index.js","sourceRoot":"","sources":["../src/random-pick-index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAA;AACjF,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAO3C,MAAM,UAAU,eAAe,CAAC,GAAG,IAEiC;IAElE,IAAI,SAAiC,CAAA;IACrC,IAAI,KAA6B,CAAA;IAEjC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,SAAS,GAAG,2BAA2B,CACtC;QAAA,CAAC,KAAK,CAAC,GAAG,IAAI,CAAA;IACjB,CAAC;SAAM,CAAC;QACN,CAAC,SAAS,EAAE,KAAK,CAAC,GAAG,IAAI,CAAA;IAC3B,CAAC;IAED,OAAO,SAAS,CAAC,SAAS,EAAE,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;AAC9C,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { NonEmptyArray } from 'justypes';
|
|
2
|
+
import { IRandomNumberGenerator } from './types.js';
|
|
3
|
+
export declare function randomPickItem<T>(items: NonEmptyArray<T>): T;
|
|
4
|
+
export declare function randomPickItem<T>(generator: IRandomNumberGenerator, items: NonEmptyArray<T>): T;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { nativeRandomNumberGenerator } from './native-random-number-generator.js';
|
|
2
|
+
import { randomPickIndex } from './random-pick-index.js';
|
|
3
|
+
export function randomPickItem(...args) {
|
|
4
|
+
let generator;
|
|
5
|
+
let items;
|
|
6
|
+
if (args.length === 1) {
|
|
7
|
+
generator = nativeRandomNumberGenerator;
|
|
8
|
+
[items] = args;
|
|
9
|
+
}
|
|
10
|
+
else {
|
|
11
|
+
[generator, items] = args;
|
|
12
|
+
}
|
|
13
|
+
const index = randomPickIndex(generator, items);
|
|
14
|
+
return items[index];
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=random-pick-item.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"random-pick-item.js","sourceRoot":"","sources":["../src/random-pick-item.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAA;AACjF,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAOxD,MAAM,UAAU,cAAc,CAAI,GAAG,IAEyB;IAE5D,IAAI,SAAiC,CAAA;IACrC,IAAI,KAAuB,CAAA;IAE3B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,SAAS,GAAG,2BAA2B,CACtC;QAAA,CAAC,KAAK,CAAC,GAAG,IAAI,CAAA;IACjB,CAAC;SAAM,CAAC;QACN,CAAC,SAAS,EAAE,KAAK,CAAC,GAAG,IAAI,CAAA;IAC3B,CAAC;IAED,MAAM,KAAK,GAAG,eAAe,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;IAC/C,OAAO,KAAK,CAAC,KAAK,CAAC,CAAA;AACrB,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { NonEmptyArray } from 'justypes';
|
|
2
|
+
import { IRandomNumberGenerator } from './types.js';
|
|
3
|
+
export declare function randomPickWeightedIndex(weights: NonEmptyArray<number>): number;
|
|
4
|
+
export declare function randomPickWeightedIndex(generator: IRandomNumberGenerator, weights: NonEmptyArray<number>): number;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { remapToWeightedIndex } from 'extra-utils';
|
|
2
|
+
import { nativeRandomNumberGenerator } from './native-random-number-generator.js';
|
|
3
|
+
export function randomPickWeightedIndex(...args) {
|
|
4
|
+
let generator;
|
|
5
|
+
let weights;
|
|
6
|
+
if (args.length === 1) {
|
|
7
|
+
generator = nativeRandomNumberGenerator;
|
|
8
|
+
[weights] = args;
|
|
9
|
+
}
|
|
10
|
+
else {
|
|
11
|
+
[generator, weights] = args;
|
|
12
|
+
}
|
|
13
|
+
return remapToWeightedIndex(generator.next(), [0, 1], weights);
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=random-pick-weighted-index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"random-pick-weighted-index.js","sourceRoot":"","sources":["../src/random-pick-weighted-index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAElD,OAAO,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAA;AAOjF,MAAM,UAAU,uBAAuB,CAAC,GAAG,IAE0B;IAEnE,IAAI,SAAiC,CAAA;IACrC,IAAI,OAA8B,CAAA;IAElC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,SAAS,GAAG,2BAA2B,CACtC;QAAA,CAAC,OAAO,CAAC,GAAG,IAAI,CAAA;IACnB,CAAC;SAAM,CAAC;QACN,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;IAC7B,CAAC;IAED,OAAO,oBAAoB,CACzB,SAAS,CAAC,IAAI,EAAE,EAChB,CAAC,CAAC,EAAE,CAAC,CAAC,EACN,OAAO,CACR,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { NonEmptyArray } from 'justypes';
|
|
2
|
+
import { IRandomNumberGenerator } from './types.js';
|
|
3
|
+
export interface IWeightedItem {
|
|
4
|
+
weight: number;
|
|
5
|
+
}
|
|
6
|
+
export declare function randomPickWeightedItem<T extends IWeightedItem>(items: NonEmptyArray<T>): T;
|
|
7
|
+
export declare function randomPickWeightedItem<T extends IWeightedItem>(generator: IRandomNumberGenerator, items: NonEmptyArray<T>): T;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { randomPickWeightedIndex } from './random-pick-weighted-index.js';
|
|
2
|
+
import { nativeRandomNumberGenerator } from './native-random-number-generator.js';
|
|
3
|
+
export function randomPickWeightedItem(...args) {
|
|
4
|
+
let generator;
|
|
5
|
+
let items;
|
|
6
|
+
if (args.length === 1) {
|
|
7
|
+
generator = nativeRandomNumberGenerator;
|
|
8
|
+
[items] = args;
|
|
9
|
+
}
|
|
10
|
+
else {
|
|
11
|
+
[generator, items] = args;
|
|
12
|
+
}
|
|
13
|
+
const weights = items.map(option => option.weight);
|
|
14
|
+
const index = randomPickWeightedIndex(generator, weights);
|
|
15
|
+
return items[index];
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=random-pick-weighted-item.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"random-pick-weighted-item.js","sourceRoot":"","sources":["../src/random-pick-weighted-item.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAA;AAGzE,OAAO,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAA;AAWjF,MAAM,UAAU,sBAAsB,CAA0B,GAAG,IAEL;IAE5D,IAAI,SAAiC,CAAA;IACrC,IAAI,KAAuB,CAAA;IAE3B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,SAAS,GAAG,2BAA2B,CACtC;QAAA,CAAC,KAAK,CAAC,GAAG,IAAI,CAAA;IACjB,CAAC;SAAM,CAAC;QACN,CAAC,SAAS,EAAE,KAAK,CAAC,GAAG,IAAI,CAAA;IAC3B,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAA0B,CAAA;IAC3E,MAAM,KAAK,GAAG,uBAAuB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;IACzD,OAAO,KAAK,CAAC,KAAK,CAAC,CAAA;AACrB,CAAC"}
|
package/lib/shuffle.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { nativeRandomNumberGenerator } from './native-random-number-generator.js';
|
|
2
2
|
import { randomInt } from './random-int.js';
|
|
3
3
|
export function shuffle(...args) {
|
|
4
4
|
let generator;
|
|
5
5
|
let arr;
|
|
6
6
|
if (args.length === 1) {
|
|
7
|
-
generator =
|
|
7
|
+
generator = nativeRandomNumberGenerator;
|
|
8
8
|
[arr] = args;
|
|
9
9
|
}
|
|
10
10
|
else {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "extra-rand",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "Yet another random library",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"random"
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
},
|
|
55
55
|
"dependencies": {
|
|
56
56
|
"@blackglory/errors": "^3.0.3",
|
|
57
|
-
"extra-utils": "^5.
|
|
57
|
+
"extra-utils": "^5.15.0",
|
|
58
58
|
"justypes": "^4.2.1"
|
|
59
59
|
}
|
|
60
60
|
}
|
package/src/index.ts
CHANGED
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
export * from './types.js'
|
|
2
2
|
|
|
3
|
-
export * from './random.js'
|
|
3
|
+
export * from './random-float.js'
|
|
4
4
|
export * from './random-int.js'
|
|
5
5
|
export * from './random-int-inclusive.js'
|
|
6
|
+
export * from './random-number.js'
|
|
6
7
|
export * from './random-bool.js'
|
|
7
|
-
export * from './random-
|
|
8
|
-
export * from './random-weighted.js'
|
|
9
|
-
export * from './random-
|
|
10
|
-
export * from './random-
|
|
8
|
+
export * from './random-pick-item.js'
|
|
9
|
+
export * from './random-pick-weighted-item.js'
|
|
10
|
+
export * from './random-pick-index.js'
|
|
11
|
+
export * from './random-pick-weighted-index.js'
|
|
11
12
|
export * from './shuffle.js'
|
|
12
|
-
|
|
13
|
-
export * from './map-to-range.js'
|
|
14
|
-
export * from './map-to-index-by-weight.js'
|
package/src/random-bool.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { IRandomNumberGenerator } from './types.js'
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { nativeRandomNumberGenerator } from './native-random-number-generator.js'
|
|
3
|
+
import { randomFloat } from './random-float.js'
|
|
4
4
|
|
|
5
5
|
export function randomBool(probabilityOfTrue: number): boolean
|
|
6
6
|
export function randomBool(
|
|
@@ -15,11 +15,11 @@ export function randomBool(...args:
|
|
|
15
15
|
let probabilityOfTrue: number
|
|
16
16
|
|
|
17
17
|
if (args.length === 1) {
|
|
18
|
-
generator =
|
|
18
|
+
generator = nativeRandomNumberGenerator
|
|
19
19
|
;[probabilityOfTrue] = args
|
|
20
20
|
} else {
|
|
21
21
|
[generator, probabilityOfTrue] = args
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
return
|
|
24
|
+
return randomFloat(generator, 0, 1) < probabilityOfTrue
|
|
25
25
|
}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { remap } from 'extra-utils'
|
|
2
2
|
import { IRandomNumberGenerator } from './types.js'
|
|
3
|
-
import {
|
|
3
|
+
import { nativeRandomNumberGenerator } from './native-random-number-generator.js'
|
|
4
4
|
|
|
5
|
-
export function
|
|
6
|
-
export function
|
|
5
|
+
export function randomFloat(min: number, max: number): number
|
|
6
|
+
export function randomFloat(
|
|
7
7
|
generator: IRandomNumberGenerator
|
|
8
8
|
, min: number
|
|
9
9
|
, max: number
|
|
10
10
|
): number
|
|
11
|
-
export function
|
|
11
|
+
export function randomFloat(...args:
|
|
12
12
|
| [min: number, max: number]
|
|
13
13
|
| [generator: IRandomNumberGenerator, min: number, max: number]
|
|
14
14
|
): number {
|
|
@@ -17,15 +17,15 @@ export function random(...args:
|
|
|
17
17
|
let max: number
|
|
18
18
|
|
|
19
19
|
if (args.length === 2) {
|
|
20
|
-
generator =
|
|
20
|
+
generator = nativeRandomNumberGenerator
|
|
21
21
|
;[min, max] = args
|
|
22
22
|
} else {
|
|
23
23
|
[generator, min, max] = args
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
-
return
|
|
26
|
+
return remap(
|
|
27
27
|
generator.next()
|
|
28
|
-
, 0, 1
|
|
29
|
-
, min, max
|
|
28
|
+
, [0, 1]
|
|
29
|
+
, [min, max]
|
|
30
30
|
)
|
|
31
31
|
}
|