1 // https://stackoverflow.com/a/47593316/12660887
2 function mulberry32(a
) {
4 let t
= a
+= 0x6D2B79F5;
5 t
= Math
.imul(t
^ t
>>> 15, t
| 1);
6 t
^= t
+ Math
.imul(t
^ t
>>> 7, t
| 61);
7 return ((t
^ t
>>> 14) >>> 0) / 4294967296;
11 export const Random
= {
15 setSeed: function(a
) {
16 Random
.rand
= mulberry32(a
);
19 randInt: function(min
, max
) {
25 Random
.setSeed(Math
.floor(Math
.random() * 1984));
26 return Math
.floor(Random
.rand() * (max
- min
)) + min
;
29 // Inspired by https://github.com/jashkenas/underscore
30 sample: function(arr
, n
) {
32 let cpArr
= arr
.map(e
=> e
);
33 for (let index
= 0; index
< n
; index
++) {
34 const rand
= Random
.randInt(index
, arr
.length
);
35 [ cpArr
[index
], cpArr
[rand
] ] = [ cpArr
[rand
], cpArr
[index
] ];
37 const res
= cpArr
.slice(0, n
);
38 return (n
>= 2 ? res : res
[0]);
41 shuffle: function(arr
) {
42 return Random
.sample(arr
, arr
.length
);