Skip to content

Commit

Permalink
:docs: Improve JOI labels (#1526)
Browse files Browse the repository at this point in the history
  • Loading branch information
KATO-Hiro committed Nov 29, 2024
1 parent bcad7b7 commit de8317b
Show file tree
Hide file tree
Showing 5 changed files with 213 additions and 73 deletions.
19 changes: 14 additions & 5 deletions src/lib/utils/contest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -459,12 +459,19 @@ export function getJoiContestLabel(contestId: string): string {

let newLabel = base.toUpperCase();
newLabel += addJoiSubTypeIfNeeds(subType);
newLabel += SPACE;
newLabel += addJoiDivisionNameIfNeeds(division, qual);

if (division !== undefined) {
newLabel += SPACE;
newLabel += addJoiDivisionNameIfNeeds(division, qual);
}

newLabel += SPACE;
newLabel += addJoiYear(yearSuffix, yearPrefix);
newLabel += SPACE;
newLabel += addJoiQualRoundNameIfNeeds(qualRound);

if (qualRound !== undefined) {
newLabel += SPACE;
newLabel += addJoiQualRoundNameIfNeeds(qualRound);
}

return newLabel;
},
Expand All @@ -485,7 +492,9 @@ function addJoiSubTypeIfNeeds(subType: string): string {

function addJoiDivisionNameIfNeeds(division: string, qual: string): string {
if (division === 'yo') {
if (qual === '1') {
if (qual === undefined) {
return '予選';
} else if (qual === '1') {
return '一次予選';
} else if (qual === '2') {
return '二次予選';
Expand Down
24 changes: 12 additions & 12 deletions src/test/lib/utils/contest.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -374,18 +374,6 @@ describe('Contest', () => {
});
});

// TODO(#issue): Skipped until notational inconsistencies are resolved.
// Current issues:
// 1. Contest names use inconsistent formats
// 2. Need to standardize naming conventions across all contests
describe.skip('when contest_id contains joi', () => {
TestCasesForContestNameLabel.joi.forEach(({ name, value }) => {
runTests(`${name}`, [value], ({ contestId, expected }: TestCaseForContestNameLabel) => {
expect(getContestNameLabel(contestId)).toEqual(expected);
});
});
});

describe('when contest_id contains chokudai_S', () => {
TestCasesForContestNameLabel.atCoderOthers.forEach(({ name, value }) => {
runTests(`${name}`, [value], ({ contestId, expected }: TestCaseForContestNameLabel) => {
Expand Down Expand Up @@ -446,6 +434,18 @@ describe('Contest', () => {
});
});

describe('when contest_id contains joi', () => {
TestCasesForContestNameAndTaskIndex.joi.forEach(({ name, value }) => {
runTests(
`${name}`,
[value],
({ contestId, taskTableIndex, expected }: TestCaseForContestNameAndTaskIndex) => {
expect(addContestNameToTaskIndex(contestId, taskTableIndex)).toEqual(expected);
},
);
});
});

describe('when contest_id is tessoku-book', () => {
TestCasesForContestNameAndTaskIndex.tessokuBook.forEach(({ name, value }) => {
runTests(
Expand Down
154 changes: 154 additions & 0 deletions src/test/lib/utils/test_cases/contest_name_and_task_index.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { createTestCase, zip } from '../../common/test_helpers';
import {
getPastContestLabel,
getJoiContestLabel,
getAtCoderUniversityContestLabel,
getAojContestLabel,
PAST_TRANSLATIONS,
Expand Down Expand Up @@ -147,6 +148,159 @@ export const past = Object.entries(PAST_TEST_DATA).flatMap(([contestId, tasks])
generatePastTestCases(Array(tasks.tasks.length).fill(contestId), tasks.tasks),
);

const generateJoiTestCases = (
contestIds: string[],
taskIndices: string[],
): { name: string; value: TestCaseForContestNameAndTaskIndex }[] => {
return zip(contestIds, taskIndices).map(([contestId, taskIndex]) => {
const testCase = createTestCaseForContestNameAndTaskIndex(`JOI, ${contestId} ${taskIndex}`)({
contestId: `${contestId}`,
taskTableIndex: `${taskIndex}`,
expected: `${getJoiContestLabel(contestId)} - ${taskIndex}`,
});

return testCase;
});
};

const JOI_TEST_DATA = {
joi2006yo: {
contestId: 'joi2006yo',
tasks: ['A', 'B', 'C', 'D', 'E'],
},
joi2007yo: {
contestId: 'joi2007yo',
tasks: ['A', 'B', 'E', 'F'],
},
joi2018yo: {
contestId: 'joi2018yo',
tasks: ['A', 'B', 'F'],
},
joi2024yo1c: {
contestId: 'joi2024yo1c',
tasks: ['A', 'B', 'C', 'D'],
},
joi2025yo1a: {
contestId: 'joi2025yo1a',
tasks: ['A', 'B', 'D'],
},
joi2025yo1b: {
contestId: 'joi2025yo1b',
tasks: ['A', 'B', 'D'],
},
joi2023yo2: {
contestId: 'joi2023yo2',
tasks: ['A', 'B', 'C', 'D', 'E'],
},
joi2024yo2: {
contestId: 'joi2024yo2',
tasks: ['A', 'B', 'E'],
},
joi2006ho: {
contestId: 'joi2006ho',
tasks: ['A', 'B', 'C', 'D', 'E'],
},
joi2007ho: {
contestId: 'joi2007ho',
tasks: ['A', 'B', 'E'],
},
joi2023ho: {
contestId: 'joi2023ho',
tasks: ['A', 'B', 'E'],
},
joi2024ho: {
contestId: 'joi2024ho',
tasks: ['A', 'B', 'E'],
},
joisc2007: {
contestId: 'joisc2007',
tasks: ['anagra', 'buildi', 'salt', 'score'],
},
joisc2008: {
contestId: 'joisc2008',
tasks: ['belt', 'typhoon'],
},
joisc2022: {
contestId: 'joisc2022',
tasks: ['A', 'B', 'K', 'L'],
},
joisp2023: {
contestId: 'joisp2023',
tasks: ['A', 'B', 'K', 'L'],
},
joisp2024: {
contestId: 'joisp2024',
tasks: ['A', 'B', 'K', 'L'],
},
joiopen2024: {
contestId: 'joiopen2024',
tasks: ['A', 'B', 'C'],
},
'joig2021-open': {
contestId: 'joig2021-open',
tasks: ['A', 'B', 'C', 'D', 'E', 'F'],
},
'joig2022-open': {
contestId: 'joig2022-open',
tasks: ['A', 'B', 'F'],
},
'joig2023-open': {
contestId: 'joig2023-open',
tasks: ['A', 'B', 'F'],
},
joigsc2022: {
contestId: 'joigsc2022',
tasks: ['A', 'B', 'H'],
},
joigsp2023: {
contestId: 'joigsp2023',
tasks: ['A', 'B', 'H'],
},
joigsp2024: {
contestId: 'joigsp2024',
tasks: ['A', 'B', 'H'],
},
};

export const joi = Object.entries(JOI_TEST_DATA).flatMap(([contestId, tasks]) =>
generateJoiTestCases(Array(tasks.tasks.length).fill(contestId), tasks.tasks),
);

// export const joi = [
// createTestCaseForContestNameLabel('JOI 2018 qual')({
// contestId: 'joi2018yo',
// expected: '',
// }),
// createTestCaseForContestNameLabel('JOI 2024 qual 1A')({
// contestId: 'joi2024yo1a',
// expected: '',
// }),
// createTestCaseForContestNameLabel('JOI 2024 qual 1B')({
// contestId: 'joi2024yo1b',
// expected: '',
// }),
// createTestCaseForContestNameLabel('JOI 2024 qual 1C')({
// contestId: 'joi2024yo1c',
// expected: '',
// }),
// createTestCaseForContestNameLabel('JOIG 2021 open')({
// contestId: 'joig2021-open',
// expected: '',
// }),
// createTestCaseForContestNameLabel('JOIG 2022 open')({
// contestId: 'joig2022-open',
// expected: '',
// }),
// createTestCaseForContestNameLabel('JOIG 2023 open')({
// contestId: 'joig2023-open',
// expected: '',
// }),
// createTestCaseForContestNameLabel('JOIG 2024 open')({
// contestId: 'joig2024-open',
// expected: '',
// }),
// ];

export const tessokuBook = [
createTestCaseForContestNameAndTaskIndex('Tessoku Book, Task A01')({
contestId: 'tessoku-book',
Expand Down
48 changes: 0 additions & 48 deletions src/test/lib/utils/test_cases/contest_name_labels.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,54 +28,6 @@ export const aclPractice = [
}),
];

// Note: Not yet implemented, because notational distortion needs to be corrected for each contest.
export const joi = [
createTestCaseForContestNameLabel('JOIG 2024 open')({
contestId: 'joig2024-open',
expected: '',
}),
createTestCaseForContestNameLabel('JOIG 2023 open')({
contestId: 'joig2023-open',
expected: '',
}),
createTestCaseForContestNameLabel('JOIG 2022 open')({
contestId: 'joig2022-open',
expected: '',
}),
createTestCaseForContestNameLabel('JOIG 2021 open')({
contestId: 'joig2021-open',
expected: '',
}),
createTestCaseForContestNameLabel('JOI 2024 qual 1A')({
contestId: 'joi2024yo1a',
expected: '',
}),
createTestCaseForContestNameLabel('JOI 2024 qual 1B')({
contestId: 'joi2024yo1b',
expected: '',
}),
createTestCaseForContestNameLabel('JOI 2024 qual 1C')({
contestId: 'joi2024yo1c',
expected: '',
}),
createTestCaseForContestNameLabel('JOI 2023 qual 1A')({
contestId: 'joi2023yo1a',
expected: '',
}),
createTestCaseForContestNameLabel('JOI 2023 qual 1B')({
contestId: 'joi2023yo1b',
expected: '',
}),
createTestCaseForContestNameLabel('JOI 2023 qual 1C')({
contestId: 'joi2023yo1c',
expected: '',
}),
createTestCaseForContestNameLabel('JOI 2018 qual')({
contestId: 'joi2018yo',
expected: '',
}),
];

export const atCoderOthers = [
createTestCaseForContestNameLabel('Chokudai SpeedRun 001')({
contestId: 'chokudai_S001',
Expand Down
41 changes: 33 additions & 8 deletions src/test/lib/utils/test_cases/contest_type.ts
Original file line number Diff line number Diff line change
Expand Up @@ -88,17 +88,42 @@ export const aclPractice = [
];

const joiContestData = [
{ name: 'JOIG 2024 open', contestId: 'joig2024-open' },
{ name: 'JOIG 2023 open', contestId: 'joig2023-open' },
{ name: 'JOIG 2022 open', contestId: 'joig2022-open' },
{ name: 'JOIG 2021 open', contestId: 'joig2021-open' },
{ name: 'JOI 2006 qual', contestId: 'joi2006yo' },
{ name: 'JOI 2007 qual', contestId: 'joi2007yo' },
{ name: 'JOI 2018 qual', contestId: 'joi2018yo' },
{ name: 'JOI 2019 qual', contestId: 'joi2019yo' },
{ name: 'JOI 2024 qual 1A', contestId: 'joi2024yo1a' },
{ name: 'JOI 2024 qual 1B', contestId: 'joi2024yo1b' },
{ name: 'JOI 2024 qual 1C', contestId: 'joi2024yo1c' },
{ name: 'JOI 2023 qual 1A', contestId: 'joi2023yo1a' },
{ name: 'JOI 2023 qual 1B', contestId: 'joi2023yo1b' },
{ name: 'JOI 2023 qual 1C', contestId: 'joi2023yo1c' },
{ name: 'JOI 2018 qual', contestId: 'joi2018yo' },
{ name: 'JOI 2025 qual 1A', contestId: 'joi2025yo1a' },
{ name: 'JOI 2025 qual 1B', contestId: 'joi2025yo1b' },
{ name: 'JOI 2025 qual 1C', contestId: 'joi2025yo1c' },
{ name: 'JOI 2020 qual 2', contestId: 'joi2020yo2' },
{ name: 'JOI 2023 qual 2', contestId: 'joi2023yo2' },
{ name: 'JOI 2024 qual 2', contestId: 'joi2024yo2' },
{ name: 'JOI 2006 final', contestId: 'joi2006ho' },
{ name: 'JOI 2007 final', contestId: 'joi2007ho' },
{ name: 'JOI 2019 final', contestId: 'joi2019ho' },
{ name: 'JOI 2020 final', contestId: 'joi2020ho' },
{ name: 'JOI 2022 final', contestId: 'joi2022ho' },
{ name: 'JOI 2023 final', contestId: 'joi2023ho' },
{ name: 'JOI 2024 final', contestId: 'joi2024ho' },
{ name: 'JOI 2007 Spring', contestId: 'joisc2007' },
{ name: 'JOI 2008 Spring', contestId: 'joisc2008' },
{ name: 'JOI 2020 Spring', contestId: 'joisc2020' },
{ name: 'JOI 2022 Spring', contestId: 'joisc2022' },
{ name: 'JOI 2023 Spring', contestId: 'joisp2023' },
{ name: 'JOI 2024 Spring', contestId: 'joisp2024' },
{ name: 'JOI Open 2022', contestId: 'joiopen2022' },
{ name: 'JOI Open 2023', contestId: 'joiopen2023' },
{ name: 'JOI Open 2024', contestId: 'joiopen2024' },
{ name: 'JOIG 2021 open', contestId: 'joig2021-open' },
{ name: 'JOIG 2022 open', contestId: 'joig2022-open' },
{ name: 'JOIG 2023 open', contestId: 'joig2023-open' },
{ name: 'JOIG 2024 open', contestId: 'joig2024-open' },
{ name: 'JOIG 2022 Spring', contestId: 'joigsc2022' },
{ name: 'JOIG 2023 Spring', contestId: 'joigsp2023' },
{ name: 'JOIG 2024 Spring', contestId: 'joigsp2024' },
];

export const joi = joiContestData.map(({ name, contestId }) =>
Expand Down

0 comments on commit de8317b

Please sign in to comment.