diff --git a/.gitignore b/.gitignore index a7a215b..d227ab6 100644 --- a/.gitignore +++ b/.gitignore @@ -22,4 +22,5 @@ npm-debug.log* yarn-debug.log* yarn-error.log* +.eslintcache *.bak diff --git a/src/interfaces/MergedProblem.ts b/src/interfaces/MergedProblem.ts index 296545f..3f83e5e 100644 --- a/src/interfaces/MergedProblem.ts +++ b/src/interfaces/MergedProblem.ts @@ -43,6 +43,8 @@ export interface MergedProblem extends Problem { readonly Difficulty?: Difficulty; /** experimental difficulty かどうか */ readonly Augmented?: boolean; + /** コンテスト中の問題インデックス */ + readonly Index?: number; } /** コンテスト情報,解答状況,およびショートコード情報をマージした問題 */ diff --git a/src/pages/ListPage/ListTable.tsx b/src/pages/ListPage/ListTable.tsx index 03e7014..9c6aa5e 100644 --- a/src/pages/ListPage/ListTable.tsx +++ b/src/pages/ListPage/ListTable.tsx @@ -28,6 +28,7 @@ import { import { ProblemDetailModal } from '../../components/ProblemDetailModal'; import { useNavigate } from 'react-router'; import { useSearchParams } from 'react-router-dom'; +import { getHeader } from '../../utils'; export type FilterState = 'All' | 'Only Trying' | 'Only AC'; @@ -115,9 +116,11 @@ export const ListTable: React.FC = (props) => { title: string, row: RankingMergedProblem ) { + const header = + row.Index !== undefined ? `${getHeader(row.Index)}. ` : ''; return ( { const contestId = problemContestMap.get(problemId); const contest = contestId ? contestMap.get(contestId) : undefined; + const header = contest + ? `${getHeader( + contest.ProblemIdList.findIndex((pid) => pid === problem.ProblemId) + )}. ` + : ''; const shortestRankingProblem = golferProblemMap.get(problemId); const pureShortestRankingProblem = golferPureProblemMap.get(problemId); @@ -157,7 +163,7 @@ export const ProblemDetailPage: React.FC = () => { Title () ); + const problemIndexMap = contests.reduce((map, contest) => { + contest.ProblemIdList.forEach((pid, i) => { + if (pid < 0) return; + map.set(pid, i); + }); + return map; + }, new Map()); const mergedProblems = problems.map( (problem): MergedProblem => { const DateNum = Date.parse(problem.Date as string); @@ -66,6 +73,7 @@ export const mergeSolveStatus = ( SolveStatus, Difficulty, Augmented, + Index: undefined, }; } // assert コンテスト情報あり @@ -78,6 +86,7 @@ export const mergeSolveStatus = ( SolveStatus: ProblemSolveStatus.Trying, Difficulty, Augmented, + Index: problemIndexMap.get(problem.ProblemId), }; } // assert AC 済み @@ -102,6 +111,7 @@ export const mergeSolveStatus = ( SolveStatus, Difficulty, Augmented, + Index: problemIndexMap.get(problem.ProblemId), }; } );