Skip to content

Commit 1a84919

Browse files
committed
https://leetcode.cn/problems/design-authentication-manager/
1 parent b6b9f95 commit 1a84919

File tree

4 files changed

+63
-16
lines changed

4 files changed

+63
-16
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ leetcode 测试
1010

1111
##### 包含的内容如下
1212

13+
https://leetcode.cn/problems/design-authentication-manager/
14+
1315
https://leetcode.cn/problems/design-bitset/
1416

1517
https://leetcode.cn/problems/operations-lcci/
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import { MapWithExpires } from "https://deno.land/x/[email protected]/MapWithExpires.ts";
2+
class AuthenticationManager {
3+
#map = new MapWithExpires<string, { expires: number }>();
4+
constructor(public timeToLive: number) {}
5+
6+
generate(tokenId: string, currentTime: number): void {
7+
// console.log('generate')
8+
// console.log(this.#map)
9+
this.#map.set(tokenId, { expires: currentTime + this.timeToLive });
10+
}
11+
12+
renew(tokenId: string, currentTime: number): void {
13+
// console.log('renew')
14+
// console.log(this.#map)
15+
if (this.#map.has(tokenId, currentTime)) {
16+
// console.log(tokenId,currentTime,true)
17+
this.generate(tokenId, currentTime);
18+
} else {
19+
// console.log(tokenId,currentTime,false)
20+
return;
21+
}
22+
}
23+
24+
countUnexpiredTokens(currentTime: number): number {
25+
// console.log('countUnexpiredTokens',currentTime)
26+
// console.log(this.#map)
27+
this.#map.clean_expires(currentTime);
28+
// console.log(this.#map)
29+
return this.#map.size;
30+
}
31+
}
32+
export default AuthenticationManager;

design-authentication-manager/test.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import AuthenticationManager from "./index.ts";
2+
import { assertEquals } from "https://deno.land/[email protected]/testing/asserts.ts";
3+
4+
Deno.test("design-authentication-manager", () => {
5+
const authenticationManager = new AuthenticationManager(5); // 构造 AuthenticationManager ,设置 timeToLive = 5 秒。
6+
authenticationManager.renew("aaa", 1); // 时刻 1 时,没有验证码的 tokenId 为 "aaa" ,没有验证码被更新。
7+
authenticationManager.generate("aaa", 2); // 时刻 2 时,生成一个 tokenId 为 "aaa" 的新验证码。
8+
assertEquals(1, authenticationManager.countUnexpiredTokens(6)); // 时刻 6 时,只有 tokenId 为 "aaa" 的验证码未过期,所以返回 1 。
9+
authenticationManager.generate("bbb", 7); // 时刻 7 时,生成一个 tokenId 为 "bbb" 的新验证码。
10+
authenticationManager.renew("aaa", 8); // tokenId 为 "aaa" 的验证码在时刻 7 过期,且 8 >= 7 ,所以时刻 8 的renew 操作被忽略,没有验证码被更新。
11+
authenticationManager.renew("bbb", 10); // tokenId 为 "bbb" 的验证码在时刻 10 没有过期,所以 renew 操作会执行,该 token 将在时刻 15 过期。
12+
assertEquals(0, authenticationManager.countUnexpiredTokens(15)); // tokenId 为 "bbb" 的验证码在时刻 15 过期,tokenId 为 "aaa" 的验证码在时刻 7 过期,所有验证码均已过期,所以返回 0 。
13+
});

design-bitset/test.ts

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
1-
import Bitset from "./index.ts";
2-
import { assertEquals } from "https://deno.land/[email protected]/testing/asserts.ts";
3-
4-
Deno.test("design-bitset", () => {
5-
const bs = new Bitset(5); // bitset = "00000".
6-
bs.fix(3); // 将 idx = 3 处的值更新为 1 ,此时 bitset = "00010" 。
7-
bs.fix(1); // 将 idx = 1 处的值更新为 1 ,此时 bitset = "01010" 。
8-
bs.flip(); // 翻转每一位上的值,此时 bitset = "10101" 。
9-
assertEquals(false, bs.all()); // 返回 False ,bitset 中的值不全为 1 。
10-
bs.unfix(0); // 将 idx = 0 处的值更新为 0 ,此时 bitset = "00101" 。
11-
bs.flip(); // 翻转每一位上的值,此时 bitset = "11010" 。
12-
assertEquals(true, bs.one()); // 返回 True ,至少存在一位的值为 1 。
13-
bs.unfix(0); // 将 idx = 0 处的值更新为 0 ,此时 bitset = "01010" 。
14-
assertEquals(2, bs.count()); // 返回 2 ,当前有 2 位的值为 1 。
15-
assertEquals("01010", bs.toString()); // 返回 "01010" ,即 bitset 的当前组成情况。
16-
});
1+
import Bitset from "./index.ts";
2+
import { assertEquals } from "https://deno.land/[email protected]/testing/asserts.ts";
3+
4+
Deno.test("design-bitset", () => {
5+
const bs = new Bitset(5); // bitset = "00000".
6+
bs.fix(3); // 将 idx = 3 处的值更新为 1 ,此时 bitset = "00010" 。
7+
bs.fix(1); // 将 idx = 1 处的值更新为 1 ,此时 bitset = "01010" 。
8+
bs.flip(); // 翻转每一位上的值,此时 bitset = "10101" 。
9+
assertEquals(false, bs.all()); // 返回 False ,bitset 中的值不全为 1 。
10+
bs.unfix(0); // 将 idx = 0 处的值更新为 0 ,此时 bitset = "00101" 。
11+
bs.flip(); // 翻转每一位上的值,此时 bitset = "11010" 。
12+
assertEquals(true, bs.one()); // 返回 True ,至少存在一位的值为 1 。
13+
bs.unfix(0); // 将 idx = 0 处的值更新为 0 ,此时 bitset = "01010" 。
14+
assertEquals(2, bs.count()); // 返回 2 ,当前有 2 位的值为 1 。
15+
assertEquals("01010", bs.toString()); // 返回 "01010" ,即 bitset 的当前组成情况。
16+
});

0 commit comments

Comments
 (0)