@tktb-tess/util-fns 0.11.1 → 0.11.2
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/dist/bundle.js +370 -479
- package/dist/bundle.min.js +2 -2
- package/dist/pcg_minimal.d.ts +4 -6
- package/dist/random.d.ts +1 -23
- package/dist/util.d.ts +1 -6
- package/dist/worker_stream.d.ts +1 -1
- package/dist/xoshiro_minimal.d.ts +7 -8
- package/package.json +1 -1
- package/dist/icon.svg +0 -23
package/dist/bundle.js
CHANGED
|
@@ -1,252 +1,252 @@
|
|
|
1
|
-
const
|
|
2
|
-
if (typeof
|
|
3
|
-
const
|
|
4
|
-
if (
|
|
5
|
-
if (typeof
|
|
6
|
-
return
|
|
7
|
-
if (typeof
|
|
8
|
-
return
|
|
9
|
-
if (typeof
|
|
1
|
+
const x = new TextEncoder(), z = (n, t) => [n].includes(t), d = (n, t) => {
|
|
2
|
+
if (typeof n != typeof t) return !1;
|
|
3
|
+
const e = Object.prototype.toString.call(n), r = Object.prototype.toString.call(t);
|
|
4
|
+
if (e !== r) return !1;
|
|
5
|
+
if (typeof n == "string" || typeof n == "bigint" || typeof n == "boolean" || typeof n == "symbol" || n == null)
|
|
6
|
+
return n === t;
|
|
7
|
+
if (typeof n == "number")
|
|
8
|
+
return n !== n && t !== t || n === t;
|
|
9
|
+
if (typeof n == "function")
|
|
10
10
|
return !1;
|
|
11
|
-
if (Array.isArray(
|
|
12
|
-
if (
|
|
13
|
-
for (let s = 0; s <
|
|
14
|
-
if (!d(
|
|
11
|
+
if (Array.isArray(n) && Array.isArray(t)) {
|
|
12
|
+
if (n.length !== t.length) return !1;
|
|
13
|
+
for (let s = 0; s < n.length; s++)
|
|
14
|
+
if (!d(n[s], t[s])) return !1;
|
|
15
15
|
return !0;
|
|
16
16
|
}
|
|
17
|
-
if (
|
|
18
|
-
const s = [...
|
|
17
|
+
if (n instanceof Set && t instanceof Set) {
|
|
18
|
+
const s = [...n.values()], o = [...t.values()];
|
|
19
19
|
return !!d(s, o);
|
|
20
20
|
}
|
|
21
|
-
if (
|
|
22
|
-
const s = [...
|
|
21
|
+
if (n instanceof Map && t instanceof Map) {
|
|
22
|
+
const s = [...n.keys()], o = [...t.keys()];
|
|
23
23
|
if (!d(s, o)) return !1;
|
|
24
|
-
const i = [...
|
|
24
|
+
const i = [...n.values()], c = [...t.values()];
|
|
25
25
|
return !!d(i, c);
|
|
26
26
|
}
|
|
27
|
-
if (
|
|
28
|
-
const s =
|
|
29
|
-
for (const
|
|
30
|
-
const
|
|
31
|
-
if (
|
|
32
|
-
const [f, h] = [s[
|
|
27
|
+
if (e === "[object Object]") {
|
|
28
|
+
const s = n, o = t, i = Object.keys(s), c = Object.keys(o);
|
|
29
|
+
for (const l of i) {
|
|
30
|
+
const u = c.find((M) => M === l);
|
|
31
|
+
if (u === void 0) return !1;
|
|
32
|
+
const [f, h] = [s[l], o[u]];
|
|
33
33
|
if (!d(f, h)) return !1;
|
|
34
34
|
}
|
|
35
35
|
return !0;
|
|
36
36
|
}
|
|
37
|
-
throw Error(`comparing these objects is unavailable: ${
|
|
38
|
-
cause: [
|
|
37
|
+
throw Error(`comparing these objects is unavailable: ${n}, ${t}`, {
|
|
38
|
+
cause: [n, t]
|
|
39
39
|
});
|
|
40
|
-
},
|
|
41
|
-
let
|
|
40
|
+
}, H = () => {
|
|
41
|
+
let n, t;
|
|
42
42
|
return {
|
|
43
43
|
promise: new Promise((r, s) => {
|
|
44
|
-
|
|
44
|
+
n = r, t = s;
|
|
45
45
|
}),
|
|
46
|
-
resolve:
|
|
46
|
+
resolve: n,
|
|
47
47
|
reject: t
|
|
48
48
|
};
|
|
49
|
-
},
|
|
50
|
-
setTimeout(() => t(),
|
|
51
|
-
}),
|
|
52
|
-
const t = Object.prototype.toString.call(
|
|
49
|
+
}, J = (n) => new Promise((t) => {
|
|
50
|
+
setTimeout(() => t(), n);
|
|
51
|
+
}), Y = (n) => {
|
|
52
|
+
const t = Object.prototype.toString.call(n);
|
|
53
53
|
return t.slice(8, t.length - 1);
|
|
54
|
-
},
|
|
54
|
+
}, Z = (n) => (...t) => () => n(...t), Q = (n) => {
|
|
55
55
|
const t = [];
|
|
56
|
-
let
|
|
57
|
-
for (let o = 0; o <
|
|
58
|
-
const i =
|
|
59
|
-
i === '"' && (o === 0 ||
|
|
60
|
-
` && !s ? (
|
|
61
|
-
}
|
|
62
|
-
return
|
|
63
|
-
},
|
|
64
|
-
const
|
|
56
|
+
let e = [], r = "", s = !1;
|
|
57
|
+
for (let o = 0; o < n.length; o++) {
|
|
58
|
+
const i = n[o];
|
|
59
|
+
i === '"' && (o === 0 || n[o - 1] !== "\\") ? s = !s : i === "," && !s ? (e.push(r.trim()), r = "") : i === `
|
|
60
|
+
` && !s ? (e.push(r.trim()), t.push(e), e = [], r = "") : r += i;
|
|
61
|
+
}
|
|
62
|
+
return e.push(r.trim()), t.push(e), t;
|
|
63
|
+
}, tt = async (n, t) => {
|
|
64
|
+
const e = x.encode(n), r = await crypto.subtle.digest(t, e);
|
|
65
65
|
return new Uint8Array(r);
|
|
66
|
-
},
|
|
66
|
+
}, nt = (n) => encodeURIComponent(n).replace(
|
|
67
67
|
/[!'()*]/g,
|
|
68
|
-
(
|
|
69
|
-
),
|
|
70
|
-
if (
|
|
68
|
+
(e) => `%${e.charCodeAt(0).toString(16).toUpperCase()}`
|
|
69
|
+
), et = (n) => {
|
|
70
|
+
if (n.includes("+"))
|
|
71
71
|
throw Error("An input string has '+'");
|
|
72
|
-
return decodeURIComponent(
|
|
73
|
-
},
|
|
74
|
-
const r = new Blob([
|
|
72
|
+
return decodeURIComponent(n);
|
|
73
|
+
}, rt = async (n, t) => {
|
|
74
|
+
const r = new Blob([n]).stream().pipeThrough(new CompressionStream(t));
|
|
75
75
|
return new Response(r).bytes();
|
|
76
|
-
},
|
|
77
|
-
const r = new Blob([
|
|
76
|
+
}, st = async (n, t) => {
|
|
77
|
+
const r = new Blob([n]).stream().pipeThrough(new DecompressionStream(t));
|
|
78
78
|
return new Response(r).bytes();
|
|
79
|
-
},
|
|
79
|
+
}, ot = (n, t) => new Promise((e, r) => {
|
|
80
80
|
setTimeout(async () => {
|
|
81
81
|
try {
|
|
82
|
-
const s = await
|
|
83
|
-
|
|
82
|
+
const s = await n();
|
|
83
|
+
e(s);
|
|
84
84
|
} catch (s) {
|
|
85
85
|
r(s);
|
|
86
86
|
}
|
|
87
87
|
}, t);
|
|
88
|
-
}),
|
|
89
|
-
class
|
|
90
|
-
constructor(t,
|
|
91
|
-
super(
|
|
88
|
+
}), B = "NamedError";
|
|
89
|
+
class I extends Error {
|
|
90
|
+
constructor(t, e, r) {
|
|
91
|
+
super(e, r), this.errName = t;
|
|
92
92
|
}
|
|
93
|
-
static name =
|
|
93
|
+
static name = B;
|
|
94
94
|
toJSON() {
|
|
95
95
|
const t = (() => {
|
|
96
96
|
const o = this.cause;
|
|
97
97
|
return typeof o == "string" || typeof o == "number" || typeof o == "boolean" ? o : typeof o == "bigint" ? o.toString() : typeof o == "object" && o !== null ? o instanceof Set || o instanceof Map ? Object.fromEntries(o) : o : void 0;
|
|
98
|
-
})(), { errName:
|
|
98
|
+
})(), { errName: e, message: r, stack: s } = this;
|
|
99
99
|
return {
|
|
100
|
-
errName:
|
|
100
|
+
errName: e,
|
|
101
101
|
message: r,
|
|
102
102
|
stack: s,
|
|
103
103
|
cause: t
|
|
104
104
|
};
|
|
105
105
|
}
|
|
106
106
|
}
|
|
107
|
-
Object.defineProperty(
|
|
108
|
-
value:
|
|
107
|
+
Object.defineProperty(I.prototype, Symbol.toStringTag, {
|
|
108
|
+
value: B
|
|
109
109
|
});
|
|
110
|
-
const
|
|
110
|
+
const it = (n, t) => Math.floor(Math.random() * (t - n) + n), g = (n, t) => {
|
|
111
111
|
t < 0n && (t *= -1n);
|
|
112
|
-
const
|
|
113
|
-
return
|
|
114
|
-
},
|
|
115
|
-
if (!Number.isFinite(
|
|
116
|
-
if (
|
|
117
|
-
const
|
|
118
|
-
let s = Array.from(r, (o) => o.toString(2).padStart(8, "0")).join("").slice(0,
|
|
112
|
+
const e = n % t;
|
|
113
|
+
return e < 0n ? e + t : e;
|
|
114
|
+
}, N = (n, t = !1) => {
|
|
115
|
+
if (!Number.isFinite(n)) throw Error("`length` is not a valid number");
|
|
116
|
+
if (n <= 0) throw Error("`length` must be positive");
|
|
117
|
+
const e = Math.ceil(n / 8), r = crypto.getRandomValues(new Uint8Array(e));
|
|
118
|
+
let s = Array.from(r, (o) => o.toString(2).padStart(8, "0")).join("").slice(0, n);
|
|
119
119
|
return t && (s = s.replace(/^\d/, "1")), BigInt("0b" + s);
|
|
120
|
-
},
|
|
121
|
-
if (
|
|
122
|
-
throw new
|
|
123
|
-
const
|
|
120
|
+
}, T = (n, t) => {
|
|
121
|
+
if (n >= t)
|
|
122
|
+
throw new I("RangeError", "min is larger than max");
|
|
123
|
+
const e = t - n, r = e.toString(2).length, s = (() => {
|
|
124
124
|
for (let i = 0; i < 1e5; i++) {
|
|
125
|
-
const c =
|
|
126
|
-
if (c >= m(2n, BigInt(r),
|
|
127
|
-
return c %
|
|
125
|
+
const c = N(r);
|
|
126
|
+
if (c >= m(2n, BigInt(r), e))
|
|
127
|
+
return c % e;
|
|
128
128
|
}
|
|
129
129
|
throw Error("Failed to generate a random bigint");
|
|
130
130
|
})();
|
|
131
|
-
return
|
|
132
|
-
}, m = (
|
|
133
|
-
if (
|
|
131
|
+
return n + s;
|
|
132
|
+
}, m = (n, t, e) => {
|
|
133
|
+
if (e < 1n) throw Error("`mod` must be positive");
|
|
134
134
|
if (t < 0n) throw Error("`power` must not be negative");
|
|
135
|
-
if (
|
|
136
|
-
if (
|
|
137
|
-
if (
|
|
135
|
+
if (n = g(n, e), e === 1n) return 0n;
|
|
136
|
+
if (n % e === 1n || n % e === 0n) return n;
|
|
137
|
+
if (n === e - 1n) return t & 1n ? e - 1n : 1n;
|
|
138
138
|
let r = 1n;
|
|
139
139
|
for (; t > 0n; )
|
|
140
|
-
t & 1n && (r = r *
|
|
140
|
+
t & 1n && (r = r * n % e), n = n * n % e, t >>= 1n;
|
|
141
141
|
return r;
|
|
142
|
-
},
|
|
143
|
-
if (
|
|
144
|
-
if (
|
|
142
|
+
}, R = (n, t) => {
|
|
143
|
+
if (n === 0n && t === 0n) return { x: 0n, y: 0n, gcd: 0n };
|
|
144
|
+
if (n === 0n)
|
|
145
145
|
return t > 0n ? { x: 0n, y: -1n, gcd: t } : { x: 0n, y: 1n, gcd: -t };
|
|
146
146
|
if (t === 0n)
|
|
147
|
-
return
|
|
148
|
-
let [
|
|
147
|
+
return n > 0n ? { x: 1n, y: 0n, gcd: n } : { x: -1n, y: 0n, gcd: -n };
|
|
148
|
+
let [e, r, s] = [1n, 0n, n], [o, i, c] = [0n, -1n, t];
|
|
149
149
|
for (; ; ) {
|
|
150
|
-
const
|
|
151
|
-
if (
|
|
152
|
-
[
|
|
150
|
+
const l = s / c, u = s - l * c;
|
|
151
|
+
if (u === 0n) break;
|
|
152
|
+
[e, o] = [o, e - l * o], [r, i] = [i, r - l * i], [s, c] = [c, u];
|
|
153
153
|
}
|
|
154
154
|
return c < 0n && (o *= -1n, i *= -1n, c *= -1n), { x: o, y: i, gcd: c };
|
|
155
|
-
},
|
|
156
|
-
if (
|
|
157
|
-
const
|
|
158
|
-
if (
|
|
159
|
-
let c =
|
|
160
|
-
for (let
|
|
161
|
-
c *=
|
|
155
|
+
}, y = (n, t) => {
|
|
156
|
+
if (n >= t) return 1n;
|
|
157
|
+
const e = BigInt((t - 2n).toString(2).length), r = (t - n) / 2n;
|
|
158
|
+
if (e * r < 63n) {
|
|
159
|
+
let c = n;
|
|
160
|
+
for (let l = n + 2n; l < t; l += 2n)
|
|
161
|
+
c *= l;
|
|
162
162
|
return c;
|
|
163
163
|
}
|
|
164
|
-
const s =
|
|
164
|
+
const s = n + r | 1n, o = y(n, s), i = y(s, t);
|
|
165
165
|
return o * i;
|
|
166
|
-
},
|
|
167
|
-
let t = 3n,
|
|
168
|
-
const s = BigInt(
|
|
166
|
+
}, P = (n) => {
|
|
167
|
+
let t = 3n, e = 1n, r = 1n;
|
|
168
|
+
const s = BigInt(n.toString(2).length) - 1n;
|
|
169
169
|
for (let o = s - 1n; o > -1n; --o) {
|
|
170
|
-
const i = (
|
|
171
|
-
r *=
|
|
172
|
-
}
|
|
173
|
-
return
|
|
174
|
-
},
|
|
175
|
-
if (
|
|
176
|
-
if (
|
|
177
|
-
const t =
|
|
178
|
-
return
|
|
179
|
-
},
|
|
170
|
+
const i = (n >> o) + 1n | 1n;
|
|
171
|
+
r *= y(t, i), t = i, e *= r;
|
|
172
|
+
}
|
|
173
|
+
return e;
|
|
174
|
+
}, ct = (n) => {
|
|
175
|
+
if (n < 0n) throw Error("'n' must be non-negative");
|
|
176
|
+
if (n === 0n) return 1n;
|
|
177
|
+
const t = n - BigInt(n.toString(2).match(/1/g)?.length ?? 0);
|
|
178
|
+
return P(n) << t;
|
|
179
|
+
}, j = (n, t) => (n >>> (t & 31) | n << (-t & 31)) >>> 0, w = (n, t) => BigInt.asUintN(64, n >> (t & 63n) | n << (-t & 63n)), E = (n, t) => {
|
|
180
180
|
if (t < 1n || t % 2n === 0n)
|
|
181
181
|
throw Error("`n` is invalid");
|
|
182
|
-
for (;
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
let
|
|
186
|
-
for (;
|
|
187
|
-
for (;
|
|
188
|
-
|
|
182
|
+
for (; n < 0n; )
|
|
183
|
+
n += t;
|
|
184
|
+
n %= t;
|
|
185
|
+
let e = 1n;
|
|
186
|
+
for (; n !== 0n; ) {
|
|
187
|
+
for (; n % 2n === 0n; ) {
|
|
188
|
+
n /= 2n;
|
|
189
189
|
const r = t % 8n;
|
|
190
|
-
(r === 3n || r === 5n) && (
|
|
190
|
+
(r === 3n || r === 5n) && (e *= -1n);
|
|
191
191
|
}
|
|
192
|
-
[
|
|
193
|
-
}
|
|
194
|
-
return t === 1n ?
|
|
195
|
-
},
|
|
196
|
-
if (
|
|
197
|
-
if (
|
|
198
|
-
let t = 1n,
|
|
199
|
-
for (; t + 1n <
|
|
200
|
-
const r = (t +
|
|
201
|
-
r * r <
|
|
202
|
-
}
|
|
203
|
-
return
|
|
204
|
-
},
|
|
205
|
-
if (
|
|
206
|
-
if (
|
|
207
|
-
let t =
|
|
192
|
+
[n, t] = [t, n], n % 4n === 3n && t % 4n === 3n && (e *= -1n), n %= t;
|
|
193
|
+
}
|
|
194
|
+
return t === 1n ? e : 0n;
|
|
195
|
+
}, _ = (n) => {
|
|
196
|
+
if (n < 0n) return !1;
|
|
197
|
+
if (n === 0n) return !0;
|
|
198
|
+
let t = 1n, e = n;
|
|
199
|
+
for (; t + 1n < e; ) {
|
|
200
|
+
const r = (t + e) / 2n;
|
|
201
|
+
r * r < n ? t = r : e = r;
|
|
202
|
+
}
|
|
203
|
+
return n === t ** 2n || n === (t + 1n) ** 2n;
|
|
204
|
+
}, C = (n) => {
|
|
205
|
+
if (n <= 1n) return !1;
|
|
206
|
+
if (n % 2n === 0n) return n === 2n;
|
|
207
|
+
let t = n - 1n, e = 0n;
|
|
208
208
|
for (; t % 2n === 0n; )
|
|
209
|
-
t >>= 1n,
|
|
210
|
-
const [r, s] = [t,
|
|
211
|
-
let i = m(2n, r,
|
|
209
|
+
t >>= 1n, e += 1n;
|
|
210
|
+
const [r, s] = [t, e];
|
|
211
|
+
let i = m(2n, r, n);
|
|
212
212
|
if (i === 1n) return !0;
|
|
213
213
|
for (let c = 0n; c < s; c++) {
|
|
214
|
-
if (i ===
|
|
215
|
-
i = i * i %
|
|
214
|
+
if (i === n - 1n) return !0;
|
|
215
|
+
i = i * i % n;
|
|
216
216
|
}
|
|
217
217
|
return !1;
|
|
218
|
-
},
|
|
219
|
-
let t = 5n,
|
|
220
|
-
for (;
|
|
221
|
-
if (t = t > 0n ? t + 2n : t - 2n, t *= -1n, t === -15n &&
|
|
218
|
+
}, O = (n) => {
|
|
219
|
+
let t = 5n, e = E(t, n);
|
|
220
|
+
for (; e > 0n; ) {
|
|
221
|
+
if (t = t > 0n ? t + 2n : t - 2n, t *= -1n, t === -15n && _(n))
|
|
222
222
|
return [0n, 0n];
|
|
223
|
-
|
|
223
|
+
e = E(t, n);
|
|
224
224
|
}
|
|
225
|
-
return [t,
|
|
226
|
-
},
|
|
227
|
-
let s = 1n, o =
|
|
228
|
-
const i =
|
|
225
|
+
return [t, e];
|
|
226
|
+
}, p = (n, t) => (n & 1n) === 1n ? g(n + t >> 1n, t) : g(n >> 1n, t), V = (n, t, e, r) => {
|
|
227
|
+
let s = 1n, o = e;
|
|
228
|
+
const i = n.toString(2).slice(1);
|
|
229
229
|
for (const c of i)
|
|
230
|
-
[s, o] = [g(s * o, t),
|
|
230
|
+
[s, o] = [g(s * o, t), p(o * o + r * s * s, t)], c === "1" && ([s, o] = [p(e * s + o, t), p(r * s + e * o, t)]);
|
|
231
231
|
return [s, o];
|
|
232
|
-
},
|
|
233
|
-
if (
|
|
232
|
+
}, F = (n, t, e, r) => {
|
|
233
|
+
if (n % 2n !== 1n)
|
|
234
234
|
throw Error("`n` must be odd");
|
|
235
|
-
let s =
|
|
235
|
+
let s = n + 1n, o = 0n;
|
|
236
236
|
for (; s % 2n === 0n; )
|
|
237
237
|
s >>= 1n, o += 1n;
|
|
238
|
-
const [i, c] =
|
|
239
|
-
let
|
|
238
|
+
const [i, c] = V(s, n, e, t);
|
|
239
|
+
let l = c;
|
|
240
240
|
if (i === 0n) return !0;
|
|
241
|
-
r = m(r, s,
|
|
242
|
-
for (let
|
|
243
|
-
if (
|
|
244
|
-
|
|
241
|
+
r = m(r, s, n);
|
|
242
|
+
for (let u = 0n; u < o; u++) {
|
|
243
|
+
if (l === 0n) return !0;
|
|
244
|
+
l = g(l * l - 2n * r, n), r = m(r, 2n, n);
|
|
245
245
|
}
|
|
246
246
|
return !1;
|
|
247
|
-
},
|
|
248
|
-
if (
|
|
249
|
-
if (
|
|
247
|
+
}, U = (n) => {
|
|
248
|
+
if (n <= 1n) return !1;
|
|
249
|
+
if (n % 2n === 0n) return n === 2n;
|
|
250
250
|
const t = [
|
|
251
251
|
2n,
|
|
252
252
|
3n,
|
|
@@ -276,88 +276,88 @@ const ut = (e, t) => Math.floor(Math.random() * (t - e) + e), g = (e, t) => {
|
|
|
276
276
|
101n
|
|
277
277
|
];
|
|
278
278
|
for (const o of t)
|
|
279
|
-
if (
|
|
280
|
-
return
|
|
281
|
-
if (!
|
|
279
|
+
if (n % o === 0n)
|
|
280
|
+
return n === o;
|
|
281
|
+
if (!C(n))
|
|
282
282
|
return !1;
|
|
283
|
-
const [
|
|
283
|
+
const [e, r] = O(n);
|
|
284
284
|
if (r === 0n) return !1;
|
|
285
|
-
const s = (1n -
|
|
286
|
-
return
|
|
287
|
-
},
|
|
285
|
+
const s = (1n - e) / 4n;
|
|
286
|
+
return F(n, e, 1n, s);
|
|
287
|
+
}, lt = (n, t) => {
|
|
288
288
|
if (t < 2n)
|
|
289
289
|
throw Error("NoPrimesFound");
|
|
290
290
|
for (let r = 0; r < 1e5; r++) {
|
|
291
|
-
const s =
|
|
292
|
-
if (
|
|
291
|
+
const s = T(n, t);
|
|
292
|
+
if (U(s)) return s;
|
|
293
293
|
}
|
|
294
294
|
throw Error("NoPrimesFound");
|
|
295
|
-
},
|
|
296
|
-
if (
|
|
295
|
+
}, ut = (n, t = !1) => {
|
|
296
|
+
if (n < 2)
|
|
297
297
|
throw Error("NoPrimesFound");
|
|
298
298
|
for (let r = 0; r < 1e5; r++) {
|
|
299
|
-
const s =
|
|
300
|
-
if (
|
|
299
|
+
const s = N(n, t);
|
|
300
|
+
if (U(s)) return s;
|
|
301
301
|
}
|
|
302
302
|
throw Error("NoPrimesFound");
|
|
303
|
-
},
|
|
304
|
-
class
|
|
303
|
+
}, v = "Rational";
|
|
304
|
+
class a {
|
|
305
305
|
#t;
|
|
306
|
-
#
|
|
307
|
-
static name =
|
|
306
|
+
#n;
|
|
307
|
+
static name = v;
|
|
308
308
|
/**
|
|
309
309
|
* fraction (rational) class
|
|
310
310
|
* @param numerator
|
|
311
311
|
* @param denominator
|
|
312
312
|
*/
|
|
313
|
-
constructor(t,
|
|
314
|
-
|
|
313
|
+
constructor(t, e) {
|
|
314
|
+
e === 0n ? (this.#n = 0n, this.#t = t === 0n ? 0n : t > 0n ? 1n : -1n) : e > 0n ? (this.#t = t, this.#n = e) : (this.#t = -t, this.#n = -e), this.#e();
|
|
315
315
|
}
|
|
316
316
|
/**
|
|
317
317
|
* generates fraction from `number` decimal using continued fraction
|
|
318
318
|
* @param value decimal
|
|
319
319
|
* @param denominatorDigits limit of digits of denominator
|
|
320
320
|
*/
|
|
321
|
-
static fromDecimal(t,
|
|
321
|
+
static fromDecimal(t, e = 5) {
|
|
322
322
|
if (Number.isNaN(t))
|
|
323
|
-
return new
|
|
323
|
+
return new a(0n, 0n);
|
|
324
324
|
if (Math.abs(t) === 1 / 0)
|
|
325
|
-
return new
|
|
325
|
+
return new a(t > 0 ? 1n : -1n, 0n);
|
|
326
326
|
const r = t < 0;
|
|
327
327
|
r && (t *= -1);
|
|
328
328
|
const s = BigInt(Math.floor(t)), o = t - Number(s);
|
|
329
329
|
if (o === 0)
|
|
330
|
-
return new
|
|
330
|
+
return new a(r ? -s : s, 1n);
|
|
331
331
|
t = 1 / o;
|
|
332
|
-
let [i, c] = [1n, s], [
|
|
333
|
-
for (; `${
|
|
332
|
+
let [i, c] = [1n, s], [l, u] = [0n, 1n];
|
|
333
|
+
for (; `${u}`.length < e + 1; ) {
|
|
334
334
|
const f = BigInt(Math.floor(t)), h = t - Number(f);
|
|
335
|
-
if ([i, c] = [c, f * c + i], [
|
|
336
|
-
return new
|
|
335
|
+
if ([i, c] = [c, f * c + i], [l, u] = [u, f * u + l], h === 0)
|
|
336
|
+
return new a(r ? -c : c, u);
|
|
337
337
|
t = 1 / h;
|
|
338
338
|
}
|
|
339
|
-
return new
|
|
339
|
+
return new a(r ? -i : i, l);
|
|
340
340
|
}
|
|
341
341
|
/**
|
|
342
342
|
* reduction
|
|
343
343
|
*/
|
|
344
|
-
#
|
|
345
|
-
const { gcd: t } =
|
|
346
|
-
t !== 0n && (this.#t /= t, this.#
|
|
344
|
+
#e() {
|
|
345
|
+
const { gcd: t } = R(this.#t, this.#n);
|
|
346
|
+
t !== 0n && (this.#t /= t, this.#n /= t);
|
|
347
347
|
}
|
|
348
348
|
/**
|
|
349
349
|
* returns a fraction multiplied by -1
|
|
350
350
|
* @returns
|
|
351
351
|
*/
|
|
352
352
|
minus() {
|
|
353
|
-
return new
|
|
353
|
+
return new a(-this.#t, this.#n);
|
|
354
354
|
}
|
|
355
355
|
/**
|
|
356
356
|
* returns inverse of this fraction
|
|
357
357
|
* @returns
|
|
358
358
|
*/
|
|
359
359
|
inverse() {
|
|
360
|
-
return new
|
|
360
|
+
return new a(this.#n, this.#t);
|
|
361
361
|
}
|
|
362
362
|
/**
|
|
363
363
|
* returns `this + right`
|
|
@@ -365,8 +365,8 @@ class u {
|
|
|
365
365
|
* @returns
|
|
366
366
|
*/
|
|
367
367
|
add(t) {
|
|
368
|
-
const
|
|
369
|
-
return new
|
|
368
|
+
const e = this.#n * t.#n, r = this.#t * t.#n + t.#t * this.#n;
|
|
369
|
+
return new a(r, e);
|
|
370
370
|
}
|
|
371
371
|
/**
|
|
372
372
|
* returns `this - right`
|
|
@@ -382,8 +382,8 @@ class u {
|
|
|
382
382
|
* @returns
|
|
383
383
|
*/
|
|
384
384
|
multiply(t) {
|
|
385
|
-
const
|
|
386
|
-
return new
|
|
385
|
+
const e = this.#n * t.#n, r = this.#t * t.#t;
|
|
386
|
+
return new a(r, e);
|
|
387
387
|
}
|
|
388
388
|
/**
|
|
389
389
|
* returns `this / right`
|
|
@@ -400,22 +400,22 @@ class u {
|
|
|
400
400
|
* @returns `(a+c)/(b+d)`
|
|
401
401
|
*/
|
|
402
402
|
mediant(t) {
|
|
403
|
-
const
|
|
404
|
-
return new
|
|
403
|
+
const e = this.#n + t.#n, r = this.#t + t.#t;
|
|
404
|
+
return new a(r, e);
|
|
405
405
|
}
|
|
406
406
|
/**
|
|
407
407
|
* returns `number` type decimal
|
|
408
408
|
* @returns decimal
|
|
409
409
|
*/
|
|
410
410
|
toDecimal() {
|
|
411
|
-
return Number(this.#t) / Number(this.#
|
|
411
|
+
return Number(this.#t) / Number(this.#n);
|
|
412
412
|
}
|
|
413
413
|
/**
|
|
414
414
|
* returns `'numerator/denominator'`
|
|
415
415
|
* @returns string form
|
|
416
416
|
*/
|
|
417
417
|
toString() {
|
|
418
|
-
return this.#t === 0n && this.#
|
|
418
|
+
return this.#t === 0n && this.#n === 0n ? "NaN" : this.#t === 0n ? "0" : this.#n === 0n ? this.#t < 0n ? "-Infinity" : "Infinity" : this.#n === 1n ? `${this.#t}` : `${this.#t}/${this.#n}`;
|
|
419
419
|
}
|
|
420
420
|
valueOf() {
|
|
421
421
|
return this.toDecimal();
|
|
@@ -423,7 +423,7 @@ class u {
|
|
|
423
423
|
toJSON() {
|
|
424
424
|
return {
|
|
425
425
|
type: "Rational",
|
|
426
|
-
value: ["0x" + this.#t.toString(16), "0x" + this.#
|
|
426
|
+
value: ["0x" + this.#t.toString(16), "0x" + this.#n.toString(16)]
|
|
427
427
|
};
|
|
428
428
|
}
|
|
429
429
|
/**
|
|
@@ -432,8 +432,8 @@ class u {
|
|
|
432
432
|
* @returns
|
|
433
433
|
*/
|
|
434
434
|
static fromData(t) {
|
|
435
|
-
const
|
|
436
|
-
return new
|
|
435
|
+
const e = BigInt(t.value[0]), r = BigInt(t.value[1]);
|
|
436
|
+
return new a(e, r);
|
|
437
437
|
}
|
|
438
438
|
/**
|
|
439
439
|
* pases string whose form is `'numerator/denominator'`
|
|
@@ -447,212 +447,104 @@ class u {
|
|
|
447
447
|
const s = r.at(1), o = r.at(2);
|
|
448
448
|
if (!s || !o)
|
|
449
449
|
throw Error("cannot parse");
|
|
450
|
-
return new
|
|
450
|
+
return new a(BigInt(s), BigInt(o));
|
|
451
451
|
}
|
|
452
452
|
}
|
|
453
|
-
Object.defineProperty(
|
|
454
|
-
value:
|
|
453
|
+
Object.defineProperty(a.prototype, Symbol.toStringTag, {
|
|
454
|
+
value: v
|
|
455
455
|
});
|
|
456
|
-
const
|
|
457
|
-
const t = Array.from(
|
|
456
|
+
const $ = (n) => {
|
|
457
|
+
const t = Array.from(n, (e) => String.fromCharCode(e));
|
|
458
458
|
return btoa(t.join(""));
|
|
459
|
-
},
|
|
460
|
-
const t = atob(
|
|
461
|
-
return Uint8Array.from(t, (
|
|
462
|
-
},
|
|
463
|
-
const t =
|
|
464
|
-
t > 0 && (
|
|
465
|
-
const
|
|
466
|
-
return
|
|
467
|
-
},
|
|
468
|
-
let t = Array.from(
|
|
469
|
-
const
|
|
470
|
-
|
|
459
|
+
}, D = (n) => {
|
|
460
|
+
const t = atob(n);
|
|
461
|
+
return Uint8Array.from(t, (e) => e.charCodeAt(0));
|
|
462
|
+
}, at = (n) => $(n).replaceAll("+", "-").replaceAll("/", "_").replace(/=+$/, ""), ft = (n) => {
|
|
463
|
+
const t = n.length & 3;
|
|
464
|
+
t > 0 && (n = n + "=".repeat(4 - t));
|
|
465
|
+
const e = n.replaceAll("-", "+").replaceAll("_", "/");
|
|
466
|
+
return D(e);
|
|
467
|
+
}, ht = (n) => {
|
|
468
|
+
let t = Array.from(n, (o) => o.toString(16).padStart(2, "0")).join("");
|
|
469
|
+
const e = t.length % 6;
|
|
470
|
+
e && (t = "0".repeat(6 - e) + t);
|
|
471
471
|
const r = t.matchAll(/.{6}/g);
|
|
472
472
|
return Array.from(
|
|
473
473
|
r,
|
|
474
474
|
(o) => Number.parseInt(o[0], 16).toString(8).padStart(8, "0")
|
|
475
475
|
).join("").replace(/^0+/, "");
|
|
476
|
-
},
|
|
477
|
-
const t =
|
|
478
|
-
t && (
|
|
479
|
-
const
|
|
476
|
+
}, dt = (n) => {
|
|
477
|
+
const t = n.length & 7;
|
|
478
|
+
t && (n = "0".repeat(8 - t) + n);
|
|
479
|
+
const e = n.matchAll(/.{8}/g), s = Array.from(e, (o) => {
|
|
480
480
|
const i = o[0];
|
|
481
481
|
return Number.parseInt(i, 8).toString(16).padStart(6, "0");
|
|
482
482
|
}).join("").matchAll(/.{2}/g);
|
|
483
483
|
return Uint8Array.from(s, (o) => Number.parseInt(o[0], 16));
|
|
484
|
-
},
|
|
485
|
-
const t =
|
|
486
|
-
t && (
|
|
487
|
-
const
|
|
484
|
+
}, q = (n) => {
|
|
485
|
+
const t = n < 0n;
|
|
486
|
+
t && (n *= -1n);
|
|
487
|
+
const e = n.toString(2).length, r = n === 1n << BigInt(e - 1) && !(e % 7) && t, s = Math.floor(e / 7) + 1;
|
|
488
488
|
return r ? s - 1 : s;
|
|
489
|
-
},
|
|
490
|
-
const t =
|
|
491
|
-
|
|
492
|
-
const
|
|
489
|
+
}, gt = (n) => {
|
|
490
|
+
const t = q(n);
|
|
491
|
+
n = BigInt.asUintN(t * 7, n);
|
|
492
|
+
const e = new Uint8Array(t);
|
|
493
493
|
for (let s = 0; s < t - 1; ++s) {
|
|
494
|
-
const o = Number(
|
|
495
|
-
|
|
496
|
-
}
|
|
497
|
-
const r = Number(
|
|
498
|
-
return
|
|
499
|
-
},
|
|
500
|
-
const t =
|
|
501
|
-
let
|
|
494
|
+
const o = Number(n & 127n) | 128;
|
|
495
|
+
e[s] = o, n >>= 7n;
|
|
496
|
+
}
|
|
497
|
+
const r = Number(n & 127n);
|
|
498
|
+
return e[t - 1] = r, n >>= 7n, e;
|
|
499
|
+
}, mt = (n) => {
|
|
500
|
+
const t = n.length;
|
|
501
|
+
let e = 0n;
|
|
502
502
|
for (let r = 0; r < t; ++r) {
|
|
503
|
-
const s = BigInt(
|
|
504
|
-
|
|
505
|
-
}
|
|
506
|
-
return BigInt.asIntN(7 * t,
|
|
507
|
-
},
|
|
508
|
-
if (
|
|
509
|
-
let t = 0;
|
|
510
|
-
for (; e > 0 && !(e & 1); )
|
|
511
|
-
++t, e >>>= 1;
|
|
512
|
-
return t;
|
|
513
|
-
}, M = "FloatRng", S = (e) => {
|
|
514
|
-
if (e === 0n) return 64n;
|
|
503
|
+
const s = BigInt(n[r] & 127);
|
|
504
|
+
e += s << BigInt(7 * r);
|
|
505
|
+
}
|
|
506
|
+
return BigInt.asIntN(7 * t, e);
|
|
507
|
+
}, b = (n) => {
|
|
508
|
+
if (n === 0n) return 64n;
|
|
515
509
|
let t = 0n;
|
|
516
|
-
for (;
|
|
517
|
-
++t,
|
|
510
|
+
for (; n > 0n && !(n & 1n); )
|
|
511
|
+
++t, n >>= 1n;
|
|
518
512
|
return BigInt.asUintN(64, t);
|
|
519
|
-
}
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
return Number(a);
|
|
534
|
-
}
|
|
535
|
-
}
|
|
536
|
-
})(), s = r & 255;
|
|
537
|
-
let o = 126;
|
|
538
|
-
if (s === 0) {
|
|
539
|
-
o -= 8;
|
|
540
|
-
const a = 1e5;
|
|
541
|
-
let l = 0;
|
|
542
|
-
t: for (; ; ) {
|
|
543
|
-
if (l > a)
|
|
544
|
-
throw Error("loop exceeded limit");
|
|
545
|
-
const f = (() => {
|
|
546
|
-
switch (this.#t.bits) {
|
|
547
|
-
case 32:
|
|
548
|
-
return this.#t.getU32Rand() >>> 0;
|
|
549
|
-
case 64: {
|
|
550
|
-
const h = BigInt.asUintN(32, this.#t.getU64Rand());
|
|
551
|
-
return Number(h);
|
|
552
|
-
}
|
|
553
|
-
}
|
|
554
|
-
})();
|
|
555
|
-
if (f === 0) {
|
|
556
|
-
if (o -= 32, o < 0) {
|
|
557
|
-
o = 0;
|
|
558
|
-
break t;
|
|
559
|
-
}
|
|
560
|
-
} else {
|
|
561
|
-
o -= B(f);
|
|
562
|
-
break t;
|
|
563
|
-
}
|
|
564
|
-
++l;
|
|
565
|
-
}
|
|
566
|
-
} else
|
|
567
|
-
o -= B(s);
|
|
568
|
-
const i = r >>> 8 & 8388607;
|
|
569
|
-
i === 0 && r >>> 31 && ++o;
|
|
570
|
-
const c = Uint32Array.from([o << 23 | i]);
|
|
571
|
-
return new Float32Array(c.buffer)[0];
|
|
572
|
-
}
|
|
573
|
-
/**
|
|
574
|
-
* returns a random single-precision floating-point number (float32) in the range of [0.0, 1.0)
|
|
575
|
-
* @returns
|
|
576
|
-
*/
|
|
577
|
-
getF32Rand() {
|
|
578
|
-
for (let n = 0; n < 1e5; ++n) {
|
|
579
|
-
const r = this.#e();
|
|
580
|
-
if (r < 1)
|
|
581
|
-
return r;
|
|
513
|
+
}, pt = (n) => {
|
|
514
|
+
const t = 0n, e = 1023n, r = () => BigInt.asUintN(64, n()), s = (i) => {
|
|
515
|
+
const c = i & 0x7ffn;
|
|
516
|
+
let l = e - 1n;
|
|
517
|
+
if (c > 0n)
|
|
518
|
+
return l -= b(c), l;
|
|
519
|
+
l -= 11n;
|
|
520
|
+
const u = 1e5;
|
|
521
|
+
for (let f = 0; f < u; ++f) {
|
|
522
|
+
const h = r();
|
|
523
|
+
if (h > 0n)
|
|
524
|
+
return l -= b(h), l;
|
|
525
|
+
if (l -= 64n, l < t)
|
|
526
|
+
return t;
|
|
582
527
|
}
|
|
583
|
-
throw Error("exceeded
|
|
584
|
-
}
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
return BigInt.asUintN(64, this.#t.getU64Rand());
|
|
594
|
-
}
|
|
595
|
-
})(), s = r & 0x7ffn;
|
|
596
|
-
let o = n - 1n;
|
|
597
|
-
if (s === 0n) {
|
|
598
|
-
o -= 11n;
|
|
599
|
-
const a = 1e5;
|
|
600
|
-
let l = 0;
|
|
601
|
-
t: for (; ; ) {
|
|
602
|
-
if (l > a)
|
|
603
|
-
throw Error("loop exceeded limit");
|
|
604
|
-
const f = (() => {
|
|
605
|
-
switch (this.#t.bits) {
|
|
606
|
-
case 32: {
|
|
607
|
-
const h = BigInt(this.#t.getU32Rand() >>> 0), p = BigInt(this.#t.getU32Rand() >>> 0);
|
|
608
|
-
return h << 32n | p;
|
|
609
|
-
}
|
|
610
|
-
case 64:
|
|
611
|
-
return BigInt.asUintN(64, this.#t.getU64Rand());
|
|
612
|
-
}
|
|
613
|
-
})();
|
|
614
|
-
if (f === 0n) {
|
|
615
|
-
if (o -= 64n, o < t) {
|
|
616
|
-
o = t;
|
|
617
|
-
break t;
|
|
618
|
-
}
|
|
619
|
-
} else {
|
|
620
|
-
o -= S(f);
|
|
621
|
-
break t;
|
|
622
|
-
}
|
|
623
|
-
++l;
|
|
624
|
-
}
|
|
625
|
-
} else
|
|
626
|
-
o -= S(s);
|
|
627
|
-
const i = BigInt.asUintN(52, r >> 11n);
|
|
628
|
-
i === 0n && r >> 63n && ++o;
|
|
629
|
-
const c = BigUint64Array.from([o << 52n | i]);
|
|
630
|
-
return new Float64Array(c.buffer)[0];
|
|
631
|
-
}
|
|
632
|
-
/**
|
|
633
|
-
* returns a random double-precision floating-point number (float64) in the range of [0.0, 1.0)
|
|
634
|
-
* @returns
|
|
635
|
-
*/
|
|
636
|
-
getF64Rand() {
|
|
637
|
-
for (let n = 0; n < 1e5; ++n) {
|
|
638
|
-
const r = this.#n();
|
|
639
|
-
if (r < 1)
|
|
640
|
-
return r;
|
|
528
|
+
throw Error("loop exceeded limit");
|
|
529
|
+
}, o = () => {
|
|
530
|
+
const i = r(), c = BigInt.asUintN(52, i >> 11n), u = c === 0n && i >> 63n === 1n ? s(i) + 1n : s(i), { buffer: f } = BigUint64Array.from([u << 52n | c]);
|
|
531
|
+
return new Float64Array(f)[0];
|
|
532
|
+
};
|
|
533
|
+
return () => {
|
|
534
|
+
for (let c = 0; c < 1e5; ++c) {
|
|
535
|
+
const l = o();
|
|
536
|
+
if (l < 1)
|
|
537
|
+
return l;
|
|
641
538
|
}
|
|
642
|
-
throw Error("
|
|
643
|
-
}
|
|
644
|
-
}
|
|
645
|
-
|
|
646
|
-
value: M
|
|
647
|
-
});
|
|
648
|
-
const W = [0x853c49e6748fea9bn, 0xda3e39cb94b95bdbn], z = 0x5851f42d4c957f2dn, A = "PCGMinimal";
|
|
649
|
-
class X {
|
|
539
|
+
throw Error("Loop limit exceeded");
|
|
540
|
+
};
|
|
541
|
+
}, K = [0x853c49e6748fea9bn, 0xda3e39cb94b95bdbn], G = 0x5851f42d4c957f2dn, L = "PCGMinimal";
|
|
542
|
+
class W {
|
|
650
543
|
/**
|
|
651
544
|
* length = 2, `[state, increment]`
|
|
652
545
|
*/
|
|
653
546
|
#t;
|
|
654
|
-
static name =
|
|
655
|
-
bits = 32;
|
|
547
|
+
static name = L;
|
|
656
548
|
/**
|
|
657
549
|
* @param seeds
|
|
658
550
|
* `BigUint64Array` with length 2. \
|
|
@@ -667,34 +559,34 @@ class X {
|
|
|
667
559
|
* const betterRng = new PCGMinimal(seed);
|
|
668
560
|
*/
|
|
669
561
|
constructor(t) {
|
|
670
|
-
t && t.length >= 2 ? (this.#t = new BigUint64Array(2), this.#t[1] = t[1] << 1n | 1n, this.#
|
|
562
|
+
t && t.length >= 2 ? (this.#t = new BigUint64Array(2), this.#t[1] = t[1] << 1n | 1n, this.#n(), this.#t[0] += t[0], this.#n()) : this.#t = BigUint64Array.from(K);
|
|
671
563
|
}
|
|
672
564
|
/** step inner state */
|
|
673
|
-
#
|
|
674
|
-
this.#t[0] = this.#t[0] *
|
|
565
|
+
#n() {
|
|
566
|
+
this.#t[0] = this.#t[0] * G + this.#t[1];
|
|
675
567
|
}
|
|
676
568
|
/** 32bit 乱数を返す (内部状態は変わらない) */
|
|
677
|
-
get #
|
|
678
|
-
const t = this.#t[0],
|
|
679
|
-
return
|
|
569
|
+
get #e() {
|
|
570
|
+
const t = this.#t[0], e = Number(t >> 59n), r = Number(BigInt.asUintN(32, (t ^ t >> 18n) >> 27n));
|
|
571
|
+
return j(r, e);
|
|
680
572
|
}
|
|
681
573
|
/**
|
|
682
574
|
*
|
|
683
575
|
* @returns a random 32-bit unsigned integer
|
|
684
576
|
*/
|
|
685
|
-
|
|
686
|
-
return this.#
|
|
577
|
+
getRandU32() {
|
|
578
|
+
return this.#n(), this.#e;
|
|
687
579
|
}
|
|
688
580
|
/**
|
|
689
581
|
* @returns a random 32-bit unsigned integer less than `bound`
|
|
690
582
|
*/
|
|
691
|
-
|
|
583
|
+
getBoundedRandU32(t) {
|
|
692
584
|
if (t > 4294967296) throw Error("`bound` exceeded limit (2^32)");
|
|
693
585
|
if (t <= 0)
|
|
694
586
|
throw Error("'bound' must be positive");
|
|
695
587
|
const r = 4294967296 % t, s = 1e5;
|
|
696
588
|
for (let o = 0; o < s; ++o) {
|
|
697
|
-
const i = this.
|
|
589
|
+
const i = this.getRandU32();
|
|
698
590
|
if (i >= r)
|
|
699
591
|
return i % t;
|
|
700
592
|
}
|
|
@@ -708,23 +600,23 @@ class X {
|
|
|
708
600
|
* the iterator that generates random 32-bit unsigned integers `step` times \
|
|
709
601
|
* if `bound` is given, random integers are less than `bound`
|
|
710
602
|
*/
|
|
711
|
-
*
|
|
603
|
+
*genRandU32s(t, e) {
|
|
712
604
|
if (t <= 0)
|
|
713
605
|
throw Error("'step' must be positive");
|
|
714
606
|
for (let r = 0; r < t; r++)
|
|
715
|
-
yield typeof
|
|
607
|
+
yield typeof e == "number" ? this.getBoundedRandU32(e) : this.getRandU32();
|
|
716
608
|
}
|
|
717
609
|
}
|
|
718
|
-
Object.defineProperty(
|
|
719
|
-
value:
|
|
610
|
+
Object.defineProperty(W.prototype, Symbol.toStringTag, {
|
|
611
|
+
value: L
|
|
720
612
|
});
|
|
721
|
-
const
|
|
613
|
+
const X = [
|
|
722
614
|
0xbe562cb412e2260en,
|
|
723
615
|
0x2e4284137d641affn,
|
|
724
616
|
0x4e19b36ee933e27en,
|
|
725
617
|
0x7581cf8c4f4d4f7dn
|
|
726
618
|
];
|
|
727
|
-
class
|
|
619
|
+
class S {
|
|
728
620
|
bits = 64;
|
|
729
621
|
#t;
|
|
730
622
|
static name = "XoshiroMinimal";
|
|
@@ -742,68 +634,68 @@ class U {
|
|
|
742
634
|
* const betterRng = new XoshiroMinimal(seed);
|
|
743
635
|
*/
|
|
744
636
|
constructor(t) {
|
|
745
|
-
t && t.length >= 4 ? (this.#t = new BigUint64Array(4), this.#t[0] = t[0], this.#t[1] = t[1], this.#
|
|
637
|
+
t && t.length >= 4 ? (this.#t = new BigUint64Array(4), this.#t[0] = t[0], this.#t[1] = t[1], this.#n(), this.#t[2] += t[2], this.#t[3] += t[3]) : this.#t = BigUint64Array.from(X);
|
|
746
638
|
}
|
|
747
|
-
#
|
|
639
|
+
#n() {
|
|
748
640
|
const t = this.#t[1] << 17n;
|
|
749
|
-
this.#t[2] ^= this.#t[0], this.#t[3] ^= this.#t[1], this.#t[1] ^= this.#t[2], this.#t[0] ^= this.#t[3], this.#t[2] ^= t, this.#t[3] =
|
|
641
|
+
this.#t[2] ^= this.#t[0], this.#t[3] ^= this.#t[1], this.#t[1] ^= this.#t[2], this.#t[0] ^= this.#t[3], this.#t[2] ^= t, this.#t[3] = w(this.#t[3], 45n);
|
|
750
642
|
}
|
|
751
643
|
get value() {
|
|
752
|
-
const t =
|
|
644
|
+
const t = w(this.#t[0] + this.#t[3], 23n) + this.#t[0];
|
|
753
645
|
return BigInt.asUintN(64, t);
|
|
754
646
|
}
|
|
755
|
-
|
|
647
|
+
getRandU64() {
|
|
756
648
|
const t = this.value;
|
|
757
|
-
return this.#
|
|
649
|
+
return this.#n(), t;
|
|
758
650
|
}
|
|
759
|
-
|
|
760
|
-
const t = BigInt.asUintN(32, this.
|
|
651
|
+
getRandU32() {
|
|
652
|
+
const t = BigInt.asUintN(32, this.getRandU64());
|
|
761
653
|
return Number(t);
|
|
762
654
|
}
|
|
763
|
-
|
|
764
|
-
const
|
|
765
|
-
if (t >
|
|
655
|
+
getBoundedRandU64(t) {
|
|
656
|
+
const e = 1n << 64n;
|
|
657
|
+
if (t > e)
|
|
766
658
|
throw Error("'bound' exceeded limit");
|
|
767
659
|
if (t <= 0n)
|
|
768
660
|
throw Error("'bound' must be positive");
|
|
769
|
-
const r =
|
|
661
|
+
const r = e % t, s = 1e5;
|
|
770
662
|
for (let o = 0; o < s; ++o) {
|
|
771
|
-
const i = this.
|
|
663
|
+
const i = this.getRandU64();
|
|
772
664
|
if (i >= r)
|
|
773
665
|
return i % t;
|
|
774
666
|
}
|
|
775
667
|
throw Error("exceeded loop limit");
|
|
776
668
|
}
|
|
777
|
-
|
|
669
|
+
getBoundedRandU32(t) {
|
|
778
670
|
if (t > 4294967296)
|
|
779
671
|
throw Error("'bound' exceeded limit");
|
|
780
672
|
if (t <= 0n)
|
|
781
673
|
throw Error("'bound' must be positive");
|
|
782
|
-
const r = this.
|
|
674
|
+
const r = this.getBoundedRandU64(BigInt(t));
|
|
783
675
|
return Number(r);
|
|
784
676
|
}
|
|
785
|
-
*
|
|
677
|
+
*genRandU64s(t, e) {
|
|
786
678
|
if (t <= 0)
|
|
787
679
|
throw Error("'step' must be positive");
|
|
788
680
|
for (let r = 0; r < t; ++r)
|
|
789
|
-
yield
|
|
681
|
+
yield e === void 0 ? this.getRandU64() : this.getBoundedRandU64(e);
|
|
790
682
|
}
|
|
791
|
-
*
|
|
683
|
+
*genRandU32s(t, e) {
|
|
792
684
|
if (t <= 0)
|
|
793
685
|
throw Error("'step' must be positive");
|
|
794
686
|
for (let r = 0; r < t; ++r)
|
|
795
|
-
yield
|
|
687
|
+
yield e === void 0 ? this.getRandU32() : this.getBoundedRandU32(e);
|
|
796
688
|
}
|
|
797
689
|
}
|
|
798
|
-
Object.defineProperty(
|
|
799
|
-
value:
|
|
690
|
+
Object.defineProperty(S.prototype, Symbol.toStringTag, {
|
|
691
|
+
value: S.name
|
|
800
692
|
});
|
|
801
|
-
const
|
|
802
|
-
class
|
|
693
|
+
const A = "WorkerStream";
|
|
694
|
+
class k extends ReadableStream {
|
|
803
695
|
close;
|
|
804
696
|
#t;
|
|
805
|
-
static name =
|
|
806
|
-
constructor(t,
|
|
697
|
+
static name = A;
|
|
698
|
+
constructor(t, e) {
|
|
807
699
|
let r, s, o;
|
|
808
700
|
super(
|
|
809
701
|
{
|
|
@@ -812,10 +704,10 @@ class J extends ReadableStream {
|
|
|
812
704
|
i.enqueue(c.data);
|
|
813
705
|
}, s = (c) => {
|
|
814
706
|
t.removeEventListener("message", r), t.removeEventListener("error", s);
|
|
815
|
-
const
|
|
707
|
+
const l = new I("WorkerStreamError", c.message, {
|
|
816
708
|
cause: c.error
|
|
817
709
|
});
|
|
818
|
-
i.error(
|
|
710
|
+
i.error(l);
|
|
819
711
|
}, o = () => {
|
|
820
712
|
t.removeEventListener("message", r), t.removeEventListener("error", s), i.close();
|
|
821
713
|
}, t.addEventListener("message", r), t.addEventListener("error", s);
|
|
@@ -824,57 +716,56 @@ class J extends ReadableStream {
|
|
|
824
716
|
console.log("Canceled reason:", i), t.removeEventListener("message", r), t.removeEventListener("error", s);
|
|
825
717
|
}
|
|
826
718
|
},
|
|
827
|
-
|
|
719
|
+
e
|
|
828
720
|
), this.close = o, this.#t = t;
|
|
829
721
|
}
|
|
830
|
-
postMessage(t,
|
|
831
|
-
this.#t.postMessage(t,
|
|
722
|
+
postMessage(t, e) {
|
|
723
|
+
this.#t.postMessage(t, e);
|
|
832
724
|
}
|
|
833
725
|
}
|
|
834
|
-
Object.defineProperty(
|
|
835
|
-
value:
|
|
726
|
+
Object.defineProperty(k.prototype, Symbol.toStringTag, {
|
|
727
|
+
value: A
|
|
836
728
|
});
|
|
837
729
|
export {
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
U as
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
730
|
+
I as NamedError,
|
|
731
|
+
W as PCGMinimal,
|
|
732
|
+
a as Rational,
|
|
733
|
+
k as WorkerStream,
|
|
734
|
+
S as XoshiroMinimal,
|
|
735
|
+
U as bailliePSW,
|
|
736
|
+
rt as compress,
|
|
737
|
+
mt as decodeLEB128,
|
|
738
|
+
et as decodeRFC3986URIComponent,
|
|
739
|
+
st as decompress,
|
|
740
|
+
gt as encodeLEB128,
|
|
741
|
+
nt as encodeRFC3986URIComponent,
|
|
742
|
+
R as exEuclidean,
|
|
743
|
+
ct as factorial,
|
|
744
|
+
pt as floatRng,
|
|
745
|
+
D as fromBase64,
|
|
746
|
+
ft as fromBase64Url,
|
|
747
|
+
dt as fromOct,
|
|
748
|
+
tt as getHash,
|
|
749
|
+
N as getRandBIByBitLength,
|
|
750
|
+
T as getRandBIByRange,
|
|
751
|
+
ut as getRandPrimeByBitLength,
|
|
752
|
+
lt as getRandPrimeByRange,
|
|
753
|
+
it as getRndInt,
|
|
754
|
+
Y as getStringTag,
|
|
863
755
|
d as isDeepStrictEqual,
|
|
864
|
-
|
|
865
|
-
O as isSquare,
|
|
756
|
+
_ as isSquare,
|
|
866
757
|
E as jacobiSymbol,
|
|
867
|
-
|
|
758
|
+
Z as lazify,
|
|
868
759
|
m as modPow,
|
|
869
|
-
|
|
760
|
+
Q as parseCSV,
|
|
870
761
|
g as residue,
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
762
|
+
j as rot32,
|
|
763
|
+
w as rot64,
|
|
764
|
+
z as sameValueZero,
|
|
765
|
+
ot as setTimeoutPromise,
|
|
766
|
+
J as sleep,
|
|
767
|
+
$ as toBase64,
|
|
768
|
+
at as toBase64Url,
|
|
769
|
+
ht as toOct,
|
|
770
|
+
H as withResolvers
|
|
880
771
|
};
|