-
Notifications
You must be signed in to change notification settings - Fork 0
/
problems.js
76 lines (71 loc) · 1.92 KB
/
problems.js
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
76
import axios from "axios"
import { createSpinner } from "nanospinner"
const baseUrl = process.env.API_URL
export const problemTags = [
'2-sat',
'binary search',
'bitmasks',
'brute force',
'combinatorics',
'constructive algorithms',
'chinese remainder theorem',
'data structures',
'dfs and similar',
'divide and conquer',
'dp',
'dsu',
'expression parsing',
'fft',
'flows',
'games',
'geometry',
'graph matchings',
'graphs',
'greedy',
'hashing',
'implementation',
'interactive',
'math',
'matrices',
'meet-in-the-middle',
'number theory',
'probabilities',
'schedules',
'shortest paths',
'sortings',
'string suffix structures',
'strings',
'ternary search',
'two pointers',
'trees'
]
const delay = async function (timeout) {
return new Promise(resolve => setTimeout(resolve, timeout))
}
export let problems = []
export const getUserProblems = async function (user) {
try {
const response = await axios.get(baseUrl + 'user.status?handle=' + user)
response.data.result.forEach(submission => {
if (submission.verdict == 'OK')
problems = problems.filter(item => item.contestId != submission.problem.contestId)
})
} catch (error) {
console.log(chalk.bgRedBright('ERROR finding problems for specified users'))
process.exit(1)
}
}
export const readProblemSet = async function () {
await delay(500)
const spinner = createSpinner('Reading problem set...').start()
try {
const response = await axios.get(baseUrl + 'problemset.problems')
response.data.result.problems.forEach(problem => {
problems.push(problem)
})
spinner.success({ text: 'Problems are ready' })
} catch (error) {
console.log(chalk.bgRedBright('ERROR Fetching the problem set'))
process.exit(1)
}
}