lscontests 1.7.2 → 1.7.3
Sign up to get free protection for your applications and to get access to all the features.
- package/README.md +91 -37
- package/dist/index.js +10 -8
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
@@ -14,7 +14,7 @@ A tool to get information about the contests on each OJ.
|
|
14
14
|
|
15
15
|
### CLI
|
16
16
|
|
17
|
-
You can use cli to get a list of contests
|
17
|
+
You can use cli to get a list of information about upcoming contests easily.
|
18
18
|
|
19
19
|
```text
|
20
20
|
lsct [options]
|
@@ -33,56 +33,71 @@ Options:
|
|
33
33
|
It performs as follows:
|
34
34
|
|
35
35
|
<details>
|
36
|
-
<summary>
|
36
|
+
<summary> <code>> lsct -o at cf</code> </summary>
|
37
37
|
|
38
38
|
```text
|
39
|
-
在最近的 3 天内有
|
40
|
-
|
39
|
+
在最近的 3 天内有 3 场比赛
|
41
40
|
|
42
41
|
比赛平台: Codeforces
|
42
|
+
比赛名称: Educational Codeforces Round 128 (Rated for Div. 2)
|
43
43
|
赛制: ICPC
|
44
44
|
开始时间: 2022/5/13 22:35:00
|
45
45
|
结束时间: 2022/5/14 00:35:00
|
46
46
|
https://codeforces.com/contests/1680
|
47
47
|
|
48
|
-
|
49
|
-
|
50
|
-
赛制:
|
51
|
-
开始时间: 2022/5/14
|
52
|
-
结束时间: 2022/5/14
|
53
|
-
https://
|
48
|
+
比赛平台: Codeforces
|
49
|
+
比赛名称: Codeforces Round #791 (Div. 2)
|
50
|
+
赛制: Codeforces
|
51
|
+
开始时间: 2022/5/14 17:35:00
|
52
|
+
结束时间: 2022/5/14 19:35:00
|
53
|
+
https://codeforces.com/contests/1679
|
54
|
+
|
55
|
+
比赛平台: AtCoder
|
56
|
+
比赛名称: Ⓐ Panasonic Programming Contest 2022(AtCoder Beginner Contest 251)
|
57
|
+
赛制: AtCoder
|
58
|
+
开始时间: 2022/5/14 20:00:00
|
59
|
+
结束时间: 2022/5/14 20:01:40
|
60
|
+
https://atcoder.jp/contests/abc251
|
54
61
|
```
|
55
62
|
|
56
63
|
</details>
|
57
64
|
|
58
65
|
<details>
|
59
|
-
<summary>
|
66
|
+
<summary> <code>> lsct -o lg -d 7 -L en</code> </summary>
|
60
67
|
|
61
68
|
```text
|
62
|
-
2 contests in the last
|
63
|
-
|
64
|
-
|
65
|
-
OJ: Codeforces
|
66
|
-
Rule: ICPC
|
67
|
-
Start time: 2022/5/13 22:35:00
|
68
|
-
End time: 2022/5/14 00:35:00
|
69
|
-
https://codeforces.com/contests/1680
|
70
|
-
|
69
|
+
2 contests in the last 7 days
|
71
70
|
|
72
71
|
OJ: Luogu
|
72
|
+
Contest name: 【LGR-109】洛谷 5 月月赛 II & Windy Round 6
|
73
73
|
Rule: IOI
|
74
74
|
Start time: 2022/5/14 14:00:00
|
75
75
|
End time: 2022/5/14 18:00:00
|
76
76
|
https://www.luogu.com.cn/contest/68326
|
77
|
+
|
78
|
+
OJ: Luogu
|
79
|
+
Contest name: 「WHOI」Round 1
|
80
|
+
Rule: IOI
|
81
|
+
Start time: 2022/5/15 14:00:00
|
82
|
+
End time: 2022/5/15 18:00:00
|
83
|
+
https://www.luogu.com.cn/contest/67377
|
77
84
|
```
|
78
85
|
|
79
86
|
</details>
|
80
87
|
|
81
88
|
<details>
|
82
|
-
<summary>
|
89
|
+
<summary> <code>> lsct -r -o cf nc --no-sort</code> </summary>
|
83
90
|
|
84
91
|
```bash
|
85
92
|
[
|
93
|
+
{
|
94
|
+
ojName: 'Codeforces',
|
95
|
+
name: 'Codeforces Round #791 (Div. 2)',
|
96
|
+
rule: 'Codeforces',
|
97
|
+
startTime: 2022-05-14T09:35:00.000Z,
|
98
|
+
endTime: 2022-05-14T11:35:00.000Z,
|
99
|
+
url: 'https://codeforces.com/contests/1679'
|
100
|
+
},
|
86
101
|
{
|
87
102
|
ojName: 'Codeforces',
|
88
103
|
name: 'Educational Codeforces Round 128 (Rated for Div. 2)',
|
@@ -92,12 +107,20 @@ https://www.luogu.com.cn/contest/68326
|
|
92
107
|
url: 'https://codeforces.com/contests/1680'
|
93
108
|
},
|
94
109
|
{
|
95
|
-
ojName: '
|
96
|
-
name: '
|
97
|
-
rule: '
|
98
|
-
startTime: 2022-05-
|
110
|
+
ojName: 'NowCoder',
|
111
|
+
name: '牛客挑战赛60',
|
112
|
+
rule: 'ICPC',
|
113
|
+
startTime: 2022-05-13T11:00:00.000Z,
|
114
|
+
endTime: 2022-05-13T14:00:00.000Z,
|
115
|
+
url: 'https://ac.nowcoder.com/acm/contest/11200'
|
116
|
+
},
|
117
|
+
{
|
118
|
+
ojName: 'NowCoder',
|
119
|
+
name: '第十八届西南科技大学ACM程序设计竞赛(同步赛)',
|
120
|
+
rule: 'ICPC',
|
121
|
+
startTime: 2022-05-14T05:00:00.000Z,
|
99
122
|
endTime: 2022-05-14T10:00:00.000Z,
|
100
|
-
url: 'https://
|
123
|
+
url: 'https://ac.nowcoder.com/acm/contest/33540'
|
101
124
|
}
|
102
125
|
]
|
103
126
|
```
|
@@ -106,7 +129,7 @@ https://www.luogu.com.cn/contest/68326
|
|
106
129
|
|
107
130
|
### API
|
108
131
|
|
109
|
-
If you want to
|
132
|
+
If you want to get a list of contest information in your project by calling *lscontests*, or if you need to add support for other OJs, then you can call the *lscontests* API as follows:
|
110
133
|
|
111
134
|
#### Get contests information string
|
112
135
|
|
@@ -116,7 +139,7 @@ import { getContestInfo } from "lscontests";
|
|
116
139
|
getContestInfo({ abbrList: ["cf", "lg"] }).then(console.log);
|
117
140
|
```
|
118
141
|
|
119
|
-
|
142
|
+
This code gives the same result as `lsct -o cf lg`.
|
120
143
|
|
121
144
|
#### Get contests information list
|
122
145
|
|
@@ -126,38 +149,69 @@ import { getContestList } from "lscontests";
|
|
126
149
|
getContestList({ sort: false }).then(console.log);
|
127
150
|
```
|
128
151
|
|
129
|
-
|
152
|
+
This code gives the same result as `lsct -r --no-sort`.
|
130
153
|
|
131
154
|
#### Add OJ support
|
132
155
|
|
133
156
|
```typescript
|
134
|
-
import { addOJ, getContestList } from "lscontests";
|
157
|
+
import { addOJ, getContestInfo, getContestList } from "lscontests";
|
135
158
|
|
136
159
|
addOJ("ts", {
|
137
160
|
name: "testOJ", get: async () => [{
|
138
161
|
ojName: "testOJ",
|
139
162
|
name: "testContest",
|
140
163
|
rule: "ICPC",
|
141
|
-
startTime: new Date(Date.now() +
|
142
|
-
endTime: new Date(Date.now() +
|
164
|
+
startTime: new Date(Date.now() + 1 * 86400000),
|
165
|
+
endTime: new Date(Date.now() + 2 * 86400000),
|
143
166
|
url: "https://www.test.com"
|
144
167
|
}]
|
145
168
|
});
|
146
169
|
|
147
|
-
|
170
|
+
async function main() {
|
171
|
+
console.log(await getContestInfo({ abbrList: ["cf", "ts"], days: 1 }, "en"));
|
172
|
+
console.log();
|
173
|
+
console.log(await getContestList({ abbrList: ["cf", "ts"], days: 7 }));
|
174
|
+
}
|
175
|
+
|
176
|
+
main();
|
148
177
|
```
|
149
178
|
|
150
|
-
|
179
|
+
This code gives the following results:
|
180
|
+
|
181
|
+
```text
|
182
|
+
1 contests in the last 1 days
|
183
|
+
|
184
|
+
OJ: testOJ
|
185
|
+
Contest name: testContest
|
186
|
+
Rule: ICPC
|
187
|
+
Start time: 2022/5/12 22:54:43
|
188
|
+
End time: 2022/5/13 22:54:43
|
189
|
+
https://www.test.com
|
151
190
|
|
152
|
-
```bash
|
153
191
|
[
|
154
192
|
{
|
155
193
|
ojName: 'testOJ',
|
156
194
|
name: 'testContest',
|
157
195
|
rule: 'ICPC',
|
158
|
-
startTime: 2022-05-
|
159
|
-
endTime: 2022-05-
|
196
|
+
startTime: 2022-05-12T14:54:46.240Z,
|
197
|
+
endTime: 2022-05-13T14:54:46.240Z,
|
160
198
|
url: 'https://www.test.com'
|
199
|
+
},
|
200
|
+
{
|
201
|
+
ojName: 'Codeforces',
|
202
|
+
name: 'Educational Codeforces Round 128 (Rated for Div. 2)',
|
203
|
+
rule: 'ICPC',
|
204
|
+
startTime: 2022-05-13T14:35:00.000Z,
|
205
|
+
endTime: 2022-05-13T16:35:00.000Z,
|
206
|
+
url: 'https://codeforces.com/contests/1680'
|
207
|
+
},
|
208
|
+
{
|
209
|
+
ojName: 'Codeforces',
|
210
|
+
name: 'Codeforces Round #791 (Div. 2)',
|
211
|
+
rule: 'Codeforces',
|
212
|
+
startTime: 2022-05-14T09:35:00.000Z,
|
213
|
+
endTime: 2022-05-14T11:35:00.000Z,
|
214
|
+
url: 'https://codeforces.com/contests/1679'
|
161
215
|
}
|
162
216
|
]
|
163
217
|
```
|
package/dist/index.js
CHANGED
@@ -78,15 +78,17 @@ function getContestInfo(config, language = "zh-CN") {
|
|
78
78
|
const info = [];
|
79
79
|
const lang = yield Promise.resolve().then(() => __importStar(require(`./locale/${language}.json`)));
|
80
80
|
info.push(format(lang.welcome, cfg.days.toString(), contests.length.toString()));
|
81
|
-
for (const
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
81
|
+
for (const contest of contests) {
|
82
|
+
const ct = [];
|
83
|
+
ct.push(`${lang.ojName}: ${contest.ojName}`);
|
84
|
+
ct.push(`${lang.name}: ${contest.name}`);
|
85
|
+
ct.push(`${lang.rule}: ${contest.rule}`);
|
86
|
+
ct.push(`${lang.startTime}: ${contest.startTime.toLocaleString()}`);
|
87
|
+
ct.push(`${lang.endTime}: ${contest.endTime.toLocaleString()}`);
|
88
|
+
ct.push(contest.url);
|
89
|
+
info.push(ct.join("\n"));
|
88
90
|
}
|
89
|
-
return info.join("\n");
|
91
|
+
return info.join("\n\n");
|
90
92
|
});
|
91
93
|
}
|
92
94
|
exports.getContestInfo = getContestInfo;
|
package/dist/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2BAAiC;AACjC,iCAAwC;
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2BAAiC;AACjC,iCAAwC;AAyE/B,sFAzEA,UAAK,OAyEA;AAjEd,MAAM,aAAa,GAAG;IAClB,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,UAAK,CAAC;IAC5B,IAAI,EAAE,CAAC;IACP,IAAI,EAAE,IAAI;CACb,CAAC;AAEF,SAAe,cAAc,CAAC,MAAe;;QACzC,MAAM,GAAG,mCAAQ,aAAa,GAAK,MAAM,CAAE,CAAC;QAC5C,IAAI,CAAC,GAAG,CAAC,QAAQ;YAAE,GAAG,CAAC,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,UAAK,CAAC,CAAC;QACrD,MAAM,QAAQ,GAAG,CAAC,MAAM,OAAO,CAAC,GAAG,CAC/B,GAAG,CAAC,QAAQ,CAAC,GAAG,CACZ,CAAO,IAAI,EAAE,EAAE;YACX,IAAI;gBACA,MAAM,GAAG,GAAG,MAAM,UAAK,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;gBACpC,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC;aACvF;YACD,OAAO,CAAC,EAAE;gBACN,OAAO,CAAC,KAAK,CAAC,uCAAuC,UAAK,CAAC,IAAI,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC;gBACnF,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACjB,OAAO,EAAE,CAAC;aACb;QACL,CAAC,CAAA,CACJ,CACJ,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QACzC,IAAI,GAAG,CAAC,IAAI;YAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;QACrF,OAAO,QAAQ,CAAC;IACpB,CAAC;CAAA;AAuCe,wCAAc;AArCjB,QAAA,QAAQ,GAAG,IAAA,gBAAW,EAAC,GAAG,SAAS,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAW5G,SAAS,MAAM,CAAC,CAAS,EAAE,GAAG,IAAc;IACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE;QAChC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACrC,OAAO,CAAC,CAAC;AACb,CAAC;AAED,SAAe,cAAc,CAAC,MAAe,EAAE,QAAQ,GAAG,OAAO;;QAC7D,IAAI,CAAC,gBAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,QAAQ,+BAA+B,gBAAQ,EAAE,CAAC,CAAC;QACzH,MAAM,GAAG,mCAAQ,aAAa,GAAK,MAAM,CAAE,CAAC;QAC5C,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,CAAC;QAC3C,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAa,wDAAa,YAAY,QAAQ,OAAO,GAAC,CAAC;QACjE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QACjF,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;YAC5B,MAAM,EAAE,GAAa,EAAE,CAAC;YACxB,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;YAC7C,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YACzC,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YACzC,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,KAAK,OAAO,CAAC,SAAS,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;YACpE,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;YAChE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACrB,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;SAC5B;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;CAAA;AAE+B,wCAAc"}
|