Skip to content

Commit c37e4eb

Browse files
committed
Fix #148
1 parent e06869a commit c37e4eb

File tree

8 files changed

+2231
-2231
lines changed

8 files changed

+2231
-2231
lines changed

src/interfaces/Problem.ts

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -32,18 +32,7 @@ export const ProblemTypes = [
3232

3333
/** 問題レベルのリスト */
3434
export const ProblemLevels = [
35-
0,
36-
1,
37-
1.5,
38-
2,
39-
2.5,
40-
3,
41-
3.5,
42-
4,
43-
4.5,
44-
5,
45-
5.5,
46-
6,
35+
0, 1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5, 5.5, 6,
4736
] as const;
4837

4938
/** 問題レベル */

src/pages/ListPage/index.tsx

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,8 @@ export const ListPage: React.FC = () => {
107107
TypedCachedApiClient.cachedGolferRankingPureProblemMap(),
108108
DifficultyDataClient.cachedDifficultyData(),
109109
]);
110-
const problemContestMap = await TypedCachedApiClient.cachedProblemContestMap();
110+
const problemContestMap =
111+
await TypedCachedApiClient.cachedProblemContestMap();
111112

112113
if (!unmounted) {
113114
setUniversalState({
@@ -210,18 +211,16 @@ export const ListPage: React.FC = () => {
210211
'Level'
211212
);
212213

213-
const [statusFilterState, setStatusFilterState] = useState<FilterState>(
214-
'All'
215-
);
214+
const [statusFilterState, setStatusFilterState] =
215+
useState<FilterState>('All');
216216
const [fromDifficultyLevel, setFromDifficultyLevel] = useState<
217217
ProblemLevel | -1
218218
>(-1);
219219
const [toDifficultyLevel, setToDifficultyLevel] = useState<
220220
ProblemLevel | 100
221221
>(INF_LEVEL);
222-
const [showTagsOfTryingProblems, setShowTagsOfTryingProblems] = useState(
223-
false
224-
);
222+
const [showTagsOfTryingProblems, setShowTagsOfTryingProblems] =
223+
useState(false);
225224
const [fromDate, setFromDate] = useState(INITIAL_FROM_DATE);
226225
const [toDate, setToDate] = useState(INITIAL_TO_DATE);
227226
const [problemTypeFilterState, setProblemTypeFilterState] = useState<

src/pages/ProblemDetailPage/index.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,8 +103,10 @@ export const ProblemDetailPage: React.FC = () => {
103103
)}. `
104104
: '';
105105

106-
const shortestRankingProblem = golferProblemMap.get(problemId);
107-
const pureShortestRankingProblem = golferPureProblemMap.get(problemId);
106+
const shortestRankingProblem =
107+
problem.No !== null ? golferProblemMap.get(problem.No) : undefined;
108+
const pureShortestRankingProblem =
109+
problem.No !== null ? golferPureProblemMap.get(problem.No) : undefined;
108110

109111
const [colorMode, setColorMode] = useLocalStorage<ProblemLinkColorMode>(
110112
'TablePage_colorMode',

src/pages/UserPage/index.tsx

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -126,15 +126,13 @@ export const UserPage: React.FC = () => {
126126
let unmounted = false;
127127
const getUserInfo = async () => {
128128
setUserStateLoaded(false);
129-
const [
130-
userInfo,
131-
solvedProblems,
132-
firstSolvedProblems,
133-
] = await Promise.all([
134-
TypedCachedApiClient.cachedUserInfo(param, user),
135-
TypedCachedApiClient.cachedSolvedProblemArray(param, user),
136-
TypedCachedApiClient.cachedFirstSolvedProblemArray(param, user),
137-
]);
129+
const [userInfo, solvedProblems, firstSolvedProblems] = await Promise.all(
130+
[
131+
TypedCachedApiClient.cachedUserInfo(param, user),
132+
TypedCachedApiClient.cachedSolvedProblemArray(param, user),
133+
TypedCachedApiClient.cachedFirstSolvedProblemArray(param, user),
134+
]
135+
);
138136
const [solvedProblemsMap, firstSolvedProblemsMap] = await Promise.all([
139137
TypedCachedApiClient.cachedSolvedProblemMap(param, user),
140138
TypedCachedApiClient.cachedFirstSolvedProblemMap(param, user),

src/utils/MergeProcs.ts

Lines changed: 89 additions & 93 deletions
Original file line numberDiff line numberDiff line change
@@ -34,75 +34,36 @@ export const mergeSolveStatus = (
3434
});
3535
return map;
3636
}, new Map<ProblemId, number>());
37-
const mergedProblems = problems.map(
38-
(problem): MergedProblem => {
39-
const DateNum = Date.parse(problem.Date as string);
40-
const contestId = problemContestMap.get(problem.ProblemId);
41-
const extendedContest = contestId
42-
? extendedContestMap.get(contestId)
37+
const mergedProblems = problems.map((problem): MergedProblem => {
38+
const DateNum = Date.parse(problem.Date as string);
39+
const contestId = problemContestMap.get(problem.ProblemId);
40+
const extendedContest = contestId
41+
? extendedContestMap.get(contestId)
42+
: undefined;
43+
const solvedProblem = solvedProblemsMap.get(problem.ProblemId);
44+
const firstSolvedProblem = firstSolvedProblemsMap.get(problem.ProblemId);
45+
const Difficulty =
46+
problem.ProblemId in difficulties
47+
? difficulties[problem.ProblemId][0]
4348
: undefined;
44-
const solvedProblem = solvedProblemsMap.get(problem.ProblemId);
45-
const firstSolvedProblem = firstSolvedProblemsMap.get(problem.ProblemId);
46-
const Difficulty =
47-
problem.ProblemId in difficulties
48-
? difficulties[problem.ProblemId][0]
49-
: undefined;
50-
const Augmented =
51-
problem.ProblemId in difficulties
52-
? difficulties[problem.ProblemId][3]
53-
: undefined;
54-
if (!extendedContest) {
55-
// コンテスト情報なし,ACしたかどうかのみ
56-
const SolveDate = solvedProblem?.Date;
57-
const SolveDateNum = SolveDate ? Date.parse(SolveDate) : undefined;
58-
const FirstSolveDate = firstSolvedProblem?.Date;
59-
const FirstSolveDateNum = FirstSolveDate
60-
? Date.parse(FirstSolveDate)
61-
: undefined;
62-
const SolveStatus =
63-
solvedProblem || FirstSolveDate
64-
? ProblemSolveStatus.Solved
65-
: ProblemSolveStatus.Trying;
66-
return {
67-
...problem,
68-
DateNum,
69-
SolveDate,
70-
SolveDateNum,
71-
FirstSolveDate,
72-
FirstSolveDateNum,
73-
SolveStatus,
74-
Difficulty,
75-
Augmented,
76-
Index: undefined,
77-
};
78-
}
79-
// assert コンテスト情報あり
80-
if (!firstSolvedProblem) {
81-
// 未 AC
82-
return {
83-
...problem,
84-
Contest: extendedContest,
85-
DateNum,
86-
SolveStatus: ProblemSolveStatus.Trying,
87-
Difficulty,
88-
Augmented,
89-
Index: problemIndexMap.get(problem.ProblemId),
90-
};
91-
}
92-
// assert AC 済み
49+
const Augmented =
50+
problem.ProblemId in difficulties
51+
? difficulties[problem.ProblemId][3]
52+
: undefined;
53+
if (!extendedContest) {
54+
// コンテスト情報なし,ACしたかどうかのみ
9355
const SolveDate = solvedProblem?.Date;
9456
const SolveDateNum = SolveDate ? Date.parse(SolveDate) : undefined;
95-
const FirstSolveDate = firstSolvedProblem.Date;
96-
const FirstSolveDateNum = Date.parse(FirstSolveDate);
57+
const FirstSolveDate = firstSolvedProblem?.Date;
58+
const FirstSolveDateNum = FirstSolveDate
59+
? Date.parse(FirstSolveDate)
60+
: undefined;
9761
const SolveStatus =
98-
FirstSolveDateNum > extendedContest.EndDateNum
62+
solvedProblem || FirstSolveDate
9963
? ProblemSolveStatus.Solved
100-
: FirstSolveDateNum >= extendedContest.DateNum
101-
? ProblemSolveStatus.Intime
102-
: ProblemSolveStatus.BeforeContest;
64+
: ProblemSolveStatus.Trying;
10365
return {
10466
...problem,
105-
Contest: extendedContest,
10667
DateNum,
10768
SolveDate,
10869
SolveDateNum,
@@ -111,10 +72,47 @@ export const mergeSolveStatus = (
11172
SolveStatus,
11273
Difficulty,
11374
Augmented,
75+
Index: undefined,
76+
};
77+
}
78+
// assert コンテスト情報あり
79+
if (!firstSolvedProblem) {
80+
// 未 AC
81+
return {
82+
...problem,
83+
Contest: extendedContest,
84+
DateNum,
85+
SolveStatus: ProblemSolveStatus.Trying,
86+
Difficulty,
87+
Augmented,
11488
Index: problemIndexMap.get(problem.ProblemId),
11589
};
11690
}
117-
);
91+
// assert AC 済み
92+
const SolveDate = solvedProblem?.Date;
93+
const SolveDateNum = SolveDate ? Date.parse(SolveDate) : undefined;
94+
const FirstSolveDate = firstSolvedProblem.Date;
95+
const FirstSolveDateNum = Date.parse(FirstSolveDate);
96+
const SolveStatus =
97+
FirstSolveDateNum > extendedContest.EndDateNum
98+
? ProblemSolveStatus.Solved
99+
: FirstSolveDateNum >= extendedContest.DateNum
100+
? ProblemSolveStatus.Intime
101+
: ProblemSolveStatus.BeforeContest;
102+
return {
103+
...problem,
104+
Contest: extendedContest,
105+
DateNum,
106+
SolveDate,
107+
SolveDateNum,
108+
FirstSolveDate,
109+
FirstSolveDateNum,
110+
SolveStatus,
111+
Difficulty,
112+
Augmented,
113+
Index: problemIndexMap.get(problem.ProblemId),
114+
};
115+
});
118116
return mergedProblems;
119117
};
120118

@@ -133,33 +131,31 @@ export const mergeRanking = (
133131
golferProblemMap: Map<ProblemNo, RankingProblem>,
134132
golferPureProblemMap: Map<ProblemNo, RankingProblem>
135133
): RankingMergedProblem[] =>
136-
mergedProblems.map(
137-
(mergedProblem): RankingMergedProblem => {
138-
const FastestRankingProblem =
139-
typeof mergedProblem.No === 'number'
140-
? speederProblemMap.get(mergedProblem.No)
141-
: undefined;
142-
const ShortestRankingProblem =
143-
typeof mergedProblem.No === 'number'
144-
? golferProblemMap.get(mergedProblem.No)
145-
: undefined;
146-
const PureShortestRankingProblem =
147-
typeof mergedProblem.No === 'number'
148-
? golferPureProblemMap.get(mergedProblem.No)
149-
: undefined;
150-
const ContestName = mergedProblem.Contest?.Name;
151-
const FastestRankingUserName = FastestRankingProblem?.UserName;
152-
const ShortestRankingUserName = ShortestRankingProblem?.UserName;
153-
const PureShortestRankingUserName = PureShortestRankingProblem?.UserName;
154-
return {
155-
...mergedProblem,
156-
FastestRankingProblem,
157-
ShortestRankingProblem,
158-
PureShortestRankingProblem,
159-
ContestName,
160-
FastestRankingUserName,
161-
ShortestRankingUserName,
162-
PureShortestRankingUserName,
163-
};
164-
}
165-
);
134+
mergedProblems.map((mergedProblem): RankingMergedProblem => {
135+
const FastestRankingProblem =
136+
typeof mergedProblem.No === 'number'
137+
? speederProblemMap.get(mergedProblem.No)
138+
: undefined;
139+
const ShortestRankingProblem =
140+
typeof mergedProblem.No === 'number'
141+
? golferProblemMap.get(mergedProblem.No)
142+
: undefined;
143+
const PureShortestRankingProblem =
144+
typeof mergedProblem.No === 'number'
145+
? golferPureProblemMap.get(mergedProblem.No)
146+
: undefined;
147+
const ContestName = mergedProblem.Contest?.Name;
148+
const FastestRankingUserName = FastestRankingProblem?.UserName;
149+
const ShortestRankingUserName = ShortestRankingProblem?.UserName;
150+
const PureShortestRankingUserName = PureShortestRankingProblem?.UserName;
151+
return {
152+
...mergedProblem,
153+
FastestRankingProblem,
154+
ShortestRankingProblem,
155+
PureShortestRankingProblem,
156+
ContestName,
157+
FastestRankingUserName,
158+
ShortestRankingUserName,
159+
PureShortestRankingUserName,
160+
};
161+
});

src/utils/OpenContest.ts

Lines changed: 3 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,7 @@ export const OpenContests: Contest[] = [
1111
Date: '2020-03-19T20:30:00+09:00',
1212
EndDate: '2020-03-19T23:00:00+09:00',
1313
ProblemIdList: [
14-
4951,
15-
4952,
16-
4954,
17-
4956,
18-
4957,
19-
4958,
20-
4959,
21-
4960,
22-
4961,
23-
4962,
24-
4963,
25-
4964,
14+
4951, 4952, 4954, 4956, 4957, 4958, 4959, 4960, 4961, 4962, 4963, 4964,
2615
4965,
2716
],
2817
},
@@ -37,24 +26,8 @@ export const OpenContests: Contest[] = [
3726
Date: '2019-10-14T13:30:00+09:00',
3827
EndDate: '2019-10-14T17:30:00+09:00',
3928
ProblemIdList: [
40-
4600,
41-
4825,
42-
-1,
43-
4560,
44-
4748,
45-
4826,
46-
4827,
47-
-1,
48-
-1,
49-
4776,
50-
4777,
51-
-1,
52-
4746,
53-
-1,
54-
4778,
55-
-1,
56-
-1,
57-
4750,
29+
4600, 4825, -1, 4560, 4748, 4826, 4827, -1, -1, 4776, 4777, -1, 4746, -1,
30+
4778, -1, -1, 4750,
5831
],
5932
},
6033
// https://www.hackerrank.com/ysf1

src/utils/index.test.ts

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,7 @@ import { getLevelList, range, mapToObject, getHeader } from './index';
44
describe('getLevelList()', () => {
55
test('problem level list should be [0] + [1, 1.5, 2, ..., 6.0]', () => {
66
expect(getLevelList()).toEqual([
7-
0,
8-
1,
9-
1.5,
10-
2,
11-
2.5,
12-
3,
13-
3.5,
14-
4,
15-
4.5,
16-
5,
17-
5.5,
18-
6,
7+
0, 1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5, 5.5, 6,
198
] as ProblemLevel[]);
209
});
2110
});

0 commit comments

Comments
 (0)