forked from The-CodingSloth/haha-funny-leetcode-extension
-
Notifications
You must be signed in to change notification settings - Fork 0
/
leetcodeProblems.ts
75 lines (70 loc) · 2.75 KB
/
leetcodeProblems.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import { storage } from "storage"
import type { APILeetCodeProblem, JSONLeetCodeProblem } from "types"
import { getProblemListFromLeetCodeAPI } from "~background"
export async function getAllLeetCodeProblems(
difficulty: string,
problemSet: string
) {
try {
// Remove lg- or all from string for better logic processing
const leetCodeProblems: APILeetCodeProblem[] =
await getProblemListFromLeetCodeAPI(
difficulty,
problemSet?.slice(3) || ""
)
let randomIndex = Math.floor(Math.random() * leetCodeProblems.length)
while (leetCodeProblems[randomIndex].paidOnly) {
randomIndex++
randomIndex =
(leetCodeProblems.length + randomIndex) % leetCodeProblems.length
}
const randomProblem = leetCodeProblems[randomIndex]
// Replace anything that is not a string or whitespace with "" then replace empty spaces with "-"
//Error with some problems with special characters TODO: Fix this ex: nondrecreasing subequence -> non-decreasing-subsequence
const randomProblemURL =
"https://leetcode.com/problems/" + randomProblem.titleSlug + "/"
const randomProblemName = randomProblem.title
// await storage.set("loading", false)
await storage.stopLoading()
return { url: randomProblemURL, name: randomProblemName }
} catch (error) {
console.error(error)
}
}
export async function getLeetCodeProblemFromProblemSet(
difficulty: string,
problemSet: string
) {
try {
const includePremium = await storage.getIncludePremium()
// TODO: Need to find a way to filter out premium problems for these JSON files
const problemSetURLs: Record<string, string> = {
allNeetcode: "leetcode-problems/allProblems.json",
NeetCode150: "leetcode-problems/neetCode150Problems.json",
Blind75: "leetcode-problems/blind75Problems.json",
metaTop100: "leetcode-problems/metaTop100.json"
}
const res = await fetch(chrome.runtime.getURL(problemSetURLs[problemSet]))
const leetCodeProblems: JSONLeetCodeProblem[] = await res.json()
const filteredLeetCodeProblems: JSONLeetCodeProblem[] =
leetCodeProblems.filter((problem) => {
if (!problem.href.endsWith("/")) {
problem.href += "/"
}
return (
(includePremium || !problem.isPremium) &&
(difficulty == "all" ||
problem.difficulty.toLowerCase() === difficulty.toLowerCase())
)
})
let randomIndex = Math.floor(
Math.random() * filteredLeetCodeProblems.length
)
const randomProblem = filteredLeetCodeProblems[randomIndex]
const randomProblemURL = randomProblem.href
const randomProblemName = randomProblem.text
return { url: randomProblemURL, name: randomProblemName }
} catch (error) {
console.error(error)
}
}