Skip to content

Commit 36bce6f

Browse files
committed
测试
1 parent aa85679 commit 36bce6f

File tree

2 files changed

+77
-54
lines changed

2 files changed

+77
-54
lines changed

fancy-sequence/Fancy.ts

Lines changed: 55 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,55 @@
1-
const MOD = 1000000007n;
2-
export default interface Fancy {
3-
getIndex: (idx: number) => number;
4-
multAll: (m: number) => void;
5-
addAll: (inc: number) => void;
6-
append: (val: number) => void;
7-
}
8-
9-
export default function Fancy(): Fancy {
10-
const values: bigint[] = [];
11-
let add = 0n;
12-
let mult = 1n;
13-
let r_mult = 1n;
14-
15-
const append = function (val: number): void {
16-
const result = ((BigInt(val) - add + MOD) * r_mult) % MOD;
17-
values.push(result);
18-
};
19-
20-
const addAll = function (inc: number): void {
21-
add = (add + BigInt(inc)) % MOD;
22-
};
23-
24-
const multAll = function (m: number): void {
25-
const mb = BigInt(m);
26-
mult = (mult * mb) % MOD;
27-
add = (add * mb) % MOD;
28-
29-
r_mult = (r_mult * multiplicativeInverse(m, MOD)) % MOD;
30-
};
31-
32-
const getIndex = function (idx: number): number {
33-
if (idx >= values.length) return -1;
34-
return Number((mult * BigInt(values[idx]) + add) % MOD);
35-
};
36-
return { getIndex, multAll, addAll, append };
37-
}
38-
39-
const multiplicativeInverse = function (x: number, mod: bigint): bigint {
40-
if (typeof INVERSES[x] !== "undefined") return INVERSES[x];
41-
const xb = BigInt(x);
42-
const mb = BigInt(mod);
43-
let y = 1n,
44-
m = mb,
45-
p = xb;
46-
m = m - 2n;
47-
48-
for (let i = 0n; 1n << i < m; i++, p = (p * p) % mb)
49-
if (((m >> i) & 1n) == 1n) y = (y * p) % mb;
50-
INVERSES[x] = y;
51-
return y;
52-
};
53-
54-
const INVERSES: bigint[] = [];
1+
const MOD = 1000000007n;
2+
export default interface Fancy {
3+
getIndex: (idx: number) => number;
4+
multAll: (m: number) => void;
5+
addAll: (inc: number) => void;
6+
append: (val: number) => void;
7+
}
8+
9+
export default function Fancy(): Fancy {
10+
const values: bigint[] = [];
11+
let add = 0n;
12+
let mult = 1n;
13+
let r_mult = 1n;
14+
15+
const append = function (val: number): void {
16+
const result = ((BigInt(val) - add + MOD) * r_mult) % MOD;
17+
values.push(result);
18+
};
19+
20+
const addAll = function (inc: number): void {
21+
add = (add + BigInt(inc)) % MOD;
22+
};
23+
24+
const multAll = function (m: number): void {
25+
const mb = BigInt(m);
26+
mult = (mult * mb) % MOD;
27+
add = (add * mb) % MOD;
28+
29+
r_mult = (r_mult * multiplicativeInverse(m, MOD)) % MOD;
30+
};
31+
32+
const getIndex = function (idx: number): number {
33+
if (idx >= values.length) return -1;
34+
return Number((mult * BigInt(values[idx]) + add) % MOD);
35+
};
36+
return { getIndex, multAll, addAll, append };
37+
}
38+
39+
const multiplicativeInverse = function (x: number, mod: bigint): bigint {
40+
if (typeof INVERSES[x] !== "undefined") return INVERSES[x];
41+
const xb = BigInt(x);
42+
const mb = BigInt(mod);
43+
let y = 1n,
44+
m = mb,
45+
p = xb;
46+
m = m - 2n;
47+
48+
for (let i = 0n; 1n << i < m; i++, p = (p * p) % mb) {
49+
if (((m >> i) & 1n) == 1n) y = (y * p) % mb;
50+
}
51+
INVERSES[x] = y;
52+
return y;
53+
};
54+
55+
const INVERSES: bigint[] = [];

fancy-sequence/test.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,29 @@
11
import { assertEquals } from "asserts";
22
import { runScript } from "leetcode-class";
33
import Fancy from "./index.ts";
4+
import Fancy2 from "./Fancy.ts";
45
Deno.test("fancy-sequence", () => {
6+
assertEquals(
7+
runScript(
8+
[
9+
"Fancy",
10+
"append",
11+
"addAll",
12+
"append",
13+
"multAll",
14+
"getIndex",
15+
"addAll",
16+
"append",
17+
"multAll",
18+
"getIndex",
19+
"getIndex",
20+
"getIndex",
21+
],
22+
[[], [2], [3], [7], [2], [0], [3], [10], [2], [0], [1], [2]],
23+
Fancy2,
24+
),
25+
[null, null, null, null, null, 10, null, null, null, 26, 34, 20],
26+
);
527
assertEquals(
628
runScript(
729
[

0 commit comments

Comments
 (0)