-
Notifications
You must be signed in to change notification settings - Fork 15
/
Copy pathindex.js
90 lines (74 loc) · 2.17 KB
/
index.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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
require('dotenv').config()
const { getLeetCodeStats } = require('./leetcode')
const { Octokit } = require('@octokit/rest')
const {
GH_TOKEN: github_token,
GIST_ID: gist_id
} = process.env
const octokit = new Octokit({
auth: `token ${github_token}`
})
async function main() {
const leetcode = await getLeetCodeStats()
await updateLeetCodeGist(leetcode)
}
async function updateLeetCodeGist(leetcode) {
let gist
try {
gist = await octokit.gists.get({
gist_id
})
} catch (error) {
console.error(
`leetcode-box cannot resolve your gist:\n${error}`
)
}
const lines = []
const title = [
"Difficulty".padEnd(10),
"Solved".padEnd(9),
"Accepted Rate".padEnd(8)
]
lines.push(title.join(" "))
for (let i = 0; i < leetcode.solved.length; i++) {
const difficulty = leetcode.solved[i].difficulty
const acceptedRate = leetcode.solved[i].acceptedRate
const solvedRadio = leetcode.solved[i].solvedRadio
const line = [
difficulty.padEnd(10),
solvedRadio.padEnd(9),
generateBarChart(acceptedRate, 20),
String(acceptedRate.toFixed(1)).padStart(5) + "%"
]
lines.push(line.join(" "))
}
try {
const filename = Object.keys(gist.data.files)[0]
await octokit.gists.update({
gist_id: gist_id,
files: {
[filename]: {
filename: `💻 My LeetCode Stats ✨`,
content: lines.join("\n")
}
}
})
} catch (error) {
console.error(`Unable to update gist\n${error}`)
}
}
function generateBarChart(percent, size) {
const syms = "░▏▎▍▌▋▊▉█";
const frac = Math.floor((size * 8 * percent) / 100);
const barsFull = Math.floor(frac / 8);
if (barsFull >= size) {
return syms.substring(8, 9).repeat(size);
}
const semi = frac % 8;
return [syms.substring(8, 9).repeat(barsFull), syms.substring(semi, semi + 1)]
.join("")
.padEnd(size, syms.substring(0, 1));
}
(async() => {
await main()
})()