Skip to content

Commit 5352890

Browse files
committed
:docs: Improve ABC, ARC and AGC contest labels (#1526)
1 parent 22b9310 commit 5352890

File tree

3 files changed

+110
-81
lines changed

3 files changed

+110
-81
lines changed

src/lib/utils/contest.ts

Lines changed: 46 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -240,52 +240,81 @@ export function getContestPriority(contestId: string): number {
240240
}
241241
}
242242

243-
export const getContestNameLabel = (contest_id: string) => {
244-
if (contest_id === 'APG4b' || contest_id === 'APG4bPython') {
245-
return contest_id;
243+
/**
244+
* Regular expression to match contest codes.
245+
*
246+
* This regex matches strings that start with one of the following prefixes:
247+
* - "abc"
248+
* - "arc"
249+
* - "agc"
250+
*
251+
* followed by exactly three digits. The matching is case-insensitive.
252+
*
253+
* Example matches:
254+
* - "abc376"
255+
* - "ARC128"
256+
* - "agc045"
257+
*
258+
* Example non-matches:
259+
* - "xyz123"
260+
* - "abc12"
261+
* - "abc1234"
262+
*/
263+
const regexForAxc = /^(abc|arc|agc)(\d{3})/i;
264+
265+
export const getContestNameLabel = (contestId: string) => {
266+
if (regexForAxc.exec(contestId)) {
267+
return contestId.replace(
268+
regexForAxc,
269+
(_, contestType, contestNumber) => `${contestType.toUpperCase()} ${contestNumber}`,
270+
);
246271
}
247272

248-
if (contest_id === 'typical90') {
273+
if (contestId === 'APG4b' || contestId === 'APG4bPython') {
274+
return contestId;
275+
}
276+
277+
if (contestId === 'typical90') {
249278
return '競プロ典型 90 問';
250279
}
251280

252-
if (contest_id === 'dp') {
281+
if (contestId === 'dp') {
253282
return 'EDPC';
254283
}
255284

256-
if (contest_id === 'tdpc') {
285+
if (contestId === 'tdpc') {
257286
return 'TDPC';
258287
}
259288

260-
if (contest_id === 'practice2') {
289+
if (contestId === 'practice2') {
261290
return 'ACL Practice';
262291
}
263292

264-
if (contest_id === 'tessoku-book') {
293+
if (contestId === 'tessoku-book') {
265294
return '競技プログラミングの鉄則';
266295
}
267296

268-
if (contest_id === 'math-and-algorithm') {
297+
if (contestId === 'math-and-algorithm') {
269298
return 'アルゴリズムと数学';
270299
}
271300

272-
if (contest_id.startsWith('chokudai_S')) {
273-
return contest_id.replace('chokudai_S', 'Chokudai SpeedRun ');
301+
if (contestId.startsWith('chokudai_S')) {
302+
return contestId.replace('chokudai_S', 'Chokudai SpeedRun ');
274303
}
275304

276-
if (aojCoursePrefixes.has(contest_id)) {
305+
if (aojCoursePrefixes.has(contestId)) {
277306
return 'AOJ Courses';
278307
}
279308

280-
if (contest_id.startsWith('PCK')) {
281-
return getAojChallengeLabel(PCK_TRANSLATIONS, contest_id);
309+
if (contestId.startsWith('PCK')) {
310+
return getAojChallengeLabel(PCK_TRANSLATIONS, contestId);
282311
}
283312

284-
if (contest_id.startsWith('JAG')) {
285-
return getAojChallengeLabel(JAG_TRANSLATIONS, contest_id);
313+
if (contestId.startsWith('JAG')) {
314+
return getAojChallengeLabel(JAG_TRANSLATIONS, contestId);
286315
}
287316

288-
return contest_id.toUpperCase();
317+
return contestId.toUpperCase();
289318
};
290319

291320
/**

src/test/lib/utils/test_cases/contest_name_and_task_index.ts

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,13 @@ const generateAbcTestCases = (
1313
taskIndices: string[],
1414
): { name: string; value: TestCaseForContestNameAndTaskIndex }[] => {
1515
return zip(contestIds, taskIndices).map(([contestId, taskIndex]) => {
16-
const testCase = createTestCaseForContestNameAndTaskIndex(`ABC${contestId}, task ${taskIndex}`)(
17-
{
18-
contestId: `abc${contestId}`,
19-
taskTableIndex: taskIndex,
20-
expected: `ABC${contestId} - ${taskIndex}`,
21-
},
22-
);
16+
const testCase = createTestCaseForContestNameAndTaskIndex(
17+
`ABC ${contestId}, task ${taskIndex}`,
18+
)({
19+
contestId: `abc${contestId}`,
20+
taskTableIndex: taskIndex,
21+
expected: `ABC ${contestId} - ${taskIndex}`,
22+
});
2323

2424
return testCase;
2525
});
@@ -162,13 +162,13 @@ const generateArcTestCases = (
162162
taskIndices: string[],
163163
): { name: string; value: TestCaseForContestNameAndTaskIndex }[] => {
164164
return zip(contestIds, taskIndices).map(([contestId, taskIndex]) => {
165-
const testCase = createTestCaseForContestNameAndTaskIndex(`ARC${contestId}, task ${taskIndex}`)(
166-
{
167-
contestId: `arc${contestId}`,
168-
taskTableIndex: taskIndex,
169-
expected: `ARC${contestId} - ${taskIndex}`,
170-
},
171-
);
165+
const testCase = createTestCaseForContestNameAndTaskIndex(
166+
`ARC ${contestId}, task ${taskIndex}`,
167+
)({
168+
contestId: `arc${contestId}`,
169+
taskTableIndex: taskIndex,
170+
expected: `ARC ${contestId} - ${taskIndex}`,
171+
});
172172

173173
return testCase;
174174
});
@@ -184,13 +184,13 @@ const generateAgcTestCases = (
184184
taskIndices: string[],
185185
): { name: string; value: TestCaseForContestNameAndTaskIndex }[] => {
186186
return zip(contestIds, taskIndices).map(([contestId, taskIndex]) => {
187-
const testCase = createTestCaseForContestNameAndTaskIndex(`AGC${contestId}, task ${taskIndex}`)(
188-
{
189-
contestId: `agc${contestId}`,
190-
taskTableIndex: taskIndex,
191-
expected: `AGC${contestId} - ${taskIndex}`,
192-
},
193-
);
187+
const testCase = createTestCaseForContestNameAndTaskIndex(
188+
`AGC ${contestId}, task ${taskIndex}`,
189+
)({
190+
contestId: `agc${contestId}`,
191+
taskTableIndex: taskIndex,
192+
expected: `AGC ${contestId} - ${taskIndex}`,
193+
});
194194

195195
return testCase;
196196
});

src/test/lib/utils/test_cases/contest_name_labels.ts

Lines changed: 43 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@ const generateAbcTestCases = (
1111
contestIds: string[],
1212
): { name: string; value: TestCaseForContestNameLabel }[] => {
1313
return contestIds.map((contestId) => {
14-
const testCase = createTestCaseForContestNameLabel(`ABC${contestId}`)({
14+
const testCase = createTestCaseForContestNameLabel(`ABC ${contestId}`)({
1515
contestId: `abc${contestId}`,
16-
expected: `ABC${contestId}`,
16+
expected: `ABC ${contestId}`,
1717
});
1818

1919
return testCase;
@@ -28,7 +28,7 @@ export const abc = generateAbcTestCases([
2828
'101',
2929
'200',
3030
'201',
31-
'365',
31+
'380',
3232
'999',
3333
]);
3434

@@ -170,84 +170,84 @@ export const mathAndAlgorithm = [
170170
];
171171

172172
export const arc = [
173-
createTestCaseForContestNameLabel('ARC001')({
173+
createTestCaseForContestNameLabel('ARC 001')({
174174
contestId: 'arc001',
175-
expected: 'ARC001',
175+
expected: 'ARC 001',
176176
}),
177-
createTestCaseForContestNameLabel('ARC002')({
177+
createTestCaseForContestNameLabel('ARC 002')({
178178
contestId: 'arc002',
179-
expected: 'ARC002',
179+
expected: 'ARC 002',
180180
}),
181-
createTestCaseForContestNameLabel('ARC057')({
181+
createTestCaseForContestNameLabel('ARC 057')({
182182
contestId: 'arc057',
183-
expected: 'ARC057',
183+
expected: 'ARC 057',
184184
}),
185-
createTestCaseForContestNameLabel('ARC058')({
185+
createTestCaseForContestNameLabel('ARC 058')({
186186
contestId: 'arc058',
187-
expected: 'ARC058',
187+
expected: 'ARC 058',
188188
}),
189-
createTestCaseForContestNameLabel('ARC099')({
189+
createTestCaseForContestNameLabel('ARC 099')({
190190
contestId: 'arc099',
191-
expected: 'ARC099',
191+
expected: 'ARC 099',
192192
}),
193-
createTestCaseForContestNameLabel('ARC100')({
193+
createTestCaseForContestNameLabel('ARC 100')({
194194
contestId: 'arc100',
195-
expected: 'ARC100',
195+
expected: 'ARC 100',
196196
}),
197-
createTestCaseForContestNameLabel('ARC101')({
197+
createTestCaseForContestNameLabel('ARC 101')({
198198
contestId: 'arc101',
199-
expected: 'ARC101',
199+
expected: 'ARC 101',
200200
}),
201-
createTestCaseForContestNameLabel('ARC103')({
201+
createTestCaseForContestNameLabel('ARC 103')({
202202
contestId: 'arc103',
203-
expected: 'ARC103',
203+
expected: 'ARC 103',
204204
}),
205-
createTestCaseForContestNameLabel('ARC104')({
205+
createTestCaseForContestNameLabel('ARC 104')({
206206
contestId: 'arc104',
207-
expected: 'ARC104',
207+
expected: 'ARC 104',
208208
}),
209-
createTestCaseForContestNameLabel('ARC105')({
209+
createTestCaseForContestNameLabel('ARC 105')({
210210
contestId: 'arc105',
211-
expected: 'ARC105',
211+
expected: 'ARC 105',
212212
}),
213-
createTestCaseForContestNameLabel('ARC182')({
214-
contestId: 'arc182',
215-
expected: 'ARC182',
213+
createTestCaseForContestNameLabel('ARC 187')({
214+
contestId: 'arc187',
215+
expected: 'ARC 187',
216216
}),
217-
createTestCaseForContestNameLabel('ARC183')({
218-
contestId: 'arc183',
219-
expected: 'ARC183',
217+
createTestCaseForContestNameLabel('ARC 188')({
218+
contestId: 'arc188',
219+
expected: 'ARC 188',
220220
}),
221221
];
222222

223223
export const agc = [
224-
createTestCaseForContestNameLabel('AGC001')({
224+
createTestCaseForContestNameLabel('AGC 001')({
225225
contestId: 'agc001',
226-
expected: 'AGC001',
226+
expected: 'AGC 001',
227227
}),
228-
createTestCaseForContestNameLabel('AGC002')({
228+
createTestCaseForContestNameLabel('AGC 002')({
229229
contestId: 'agc002',
230-
expected: 'AGC002',
230+
expected: 'AGC 002',
231231
}),
232-
createTestCaseForContestNameLabel('AGC009')({
232+
createTestCaseForContestNameLabel('AGC 009')({
233233
contestId: 'agc009',
234-
expected: 'AGC009',
234+
expected: 'AGC 009',
235235
}),
236-
createTestCaseForContestNameLabel('AGC010')({
236+
createTestCaseForContestNameLabel('AGC 010')({
237237
contestId: 'agc010',
238-
expected: 'AGC010',
238+
expected: 'AGC 010',
239239
}),
240-
createTestCaseForContestNameLabel('AGC011')({
240+
createTestCaseForContestNameLabel('AGC 011')({
241241
contestId: 'agc011',
242-
expected: 'AGC011',
242+
expected: 'AGC 011',
243243
}),
244-
createTestCaseForContestNameLabel('AGC066')({
244+
createTestCaseForContestNameLabel('AGC 066')({
245245
contestId: 'agc066',
246-
expected: 'AGC066',
246+
expected: 'AGC 066',
247247
}),
248-
createTestCaseForContestNameLabel('AGC067')({
248+
createTestCaseForContestNameLabel('AGC 067')({
249249
contestId: 'agc067',
250-
expected: 'AGC067',
250+
expected: 'AGC 067',
251251
}),
252252
];
253253

0 commit comments

Comments
 (0)