Skip to content

Commit 9c8782d

Browse files
authored
Merge pull request #1599 from AtCoder-NoviSteps/#1569
✨ Add task grade guidelines (#1569)
2 parents 08ce03c + d7919b1 commit 9c8782d

File tree

4 files changed

+203
-2
lines changed

4 files changed

+203
-2
lines changed
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
<script lang="ts">
2+
import {
3+
Table,
4+
TableBody,
5+
TableBodyCell,
6+
TableBodyRow,
7+
TableHead,
8+
TableHeadCell,
9+
} from 'flowbite-svelte';
10+
11+
import ExternalLinkWrapper from '$lib/components/ExternalLinkWrapper.svelte';
12+
import { gradeGuidelineTableData } from '$lib/components/TaskGrades/grade_guideline_table_data';
13+
import GradeLabel from '$lib/components/GradeLabel.svelte';
14+
15+
import { TASK_GRADE_CRITERIA_SHEET_URL } from '$lib/constants/urls';
16+
</script>
17+
18+
<div class="container mx-auto w-5/6 lg:w-2/3 mt-6 text-gray-800 dark:text-gray-300">
19+
<div>
20+
AtCoder Beginners Contest(通称、ABC)の配点・問題と、対応するグレードの目安を示しています。
21+
</div>
22+
<div>
23+
また、各グレードの基準に関しては、
24+
<ExternalLinkWrapper url={TASK_GRADE_CRITERIA_SHEET_URL} description="こちら" />
25+
をご覧ください。
26+
</div>
27+
</div>
28+
29+
<div class="container w-full lg:w-2/3 mx-auto mt-3 sm:mt-4 overflow-auto rounded-md border">
30+
<Table
31+
shadow
32+
id="grade-guideline"
33+
class="text-md table-fixed w-full"
34+
aria-label="Task grade guideline table"
35+
>
36+
<TableHead class="text-sm bg-gray-100">
37+
<TableHeadCell class="w-24 xs:w-32 px-3 sm:px-6 text-center">ABCの配点</TableHeadCell>
38+
<TableHeadCell class="w-40 hidden sm:table-cell text-center">問題</TableHeadCell>
39+
<TableHeadCell class="w-40 text-center">対応グレード</TableHeadCell>
40+
</TableHead>
41+
42+
<TableBody tableBodyClass="divide-y">
43+
{#each gradeGuidelineTableData as { point, task, lowerGrade, upperGrade }}
44+
<TableBodyRow>
45+
<TableBodyCell class="text-sm xs:text-md text-center py-3">{point}</TableBodyCell>
46+
<TableBodyCell class="text-center py-3 hidden sm:table-cell">{task}</TableBodyCell>
47+
48+
{#if upperGrade === lowerGrade}
49+
<TableBodyCell class="flex items-center justify-center space-x-3 py-3">
50+
<GradeLabel taskGrade={upperGrade} />
51+
</TableBodyCell>
52+
{:else}
53+
<TableBodyCell class="flex items-center justify-center space-x-3 py-3">
54+
<GradeLabel taskGrade={lowerGrade} />
55+
<p>〜</p>
56+
<GradeLabel taskGrade={upperGrade} />
57+
</TableBodyCell>
58+
{/if}
59+
</TableBodyRow>
60+
{/each}
61+
</TableBody>
62+
</Table>
63+
</div>
Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
import { TaskGrade } from '$lib/types/task';
2+
3+
type TaskGradeGuideline = {
4+
point: string;
5+
task: string;
6+
lowerGrade: TaskGrade;
7+
upperGrade: TaskGrade;
8+
};
9+
10+
type TaskGradeGuidelines = TaskGradeGuideline[];
11+
12+
export const gradeGuidelineTableData: TaskGradeGuidelines = [
13+
{
14+
point: '〜 100',
15+
task: '(JOI 一次予選 A)',
16+
lowerGrade: TaskGrade.Q10,
17+
upperGrade: TaskGrade.Q10,
18+
},
19+
{
20+
point: '100',
21+
task: 'A',
22+
lowerGrade: TaskGrade.Q9,
23+
upperGrade: TaskGrade.Q6,
24+
},
25+
{
26+
point: '150',
27+
task: 'A、B',
28+
lowerGrade: TaskGrade.Q7,
29+
upperGrade: TaskGrade.Q5,
30+
},
31+
{
32+
point: '200',
33+
task: 'B',
34+
lowerGrade: TaskGrade.Q6,
35+
upperGrade: TaskGrade.Q4,
36+
},
37+
{
38+
point: '250',
39+
task: 'B、C',
40+
lowerGrade: TaskGrade.Q5,
41+
upperGrade: TaskGrade.Q3,
42+
},
43+
{
44+
point: '300',
45+
task: 'C',
46+
lowerGrade: TaskGrade.Q4,
47+
upperGrade: TaskGrade.Q2,
48+
},
49+
{
50+
point: '350',
51+
task: 'C、D',
52+
lowerGrade: TaskGrade.Q3,
53+
upperGrade: TaskGrade.Q1,
54+
},
55+
{
56+
point: '400',
57+
task: 'D',
58+
lowerGrade: TaskGrade.Q2,
59+
upperGrade: TaskGrade.Q1,
60+
},
61+
{
62+
point: '425',
63+
task: 'D、E',
64+
lowerGrade: TaskGrade.Q2,
65+
upperGrade: TaskGrade.Q1,
66+
},
67+
{
68+
point: '450',
69+
task: 'D、E',
70+
lowerGrade: TaskGrade.Q1,
71+
upperGrade: TaskGrade.D1,
72+
},
73+
{
74+
point: '475',
75+
task: 'E、F',
76+
lowerGrade: TaskGrade.Q1,
77+
upperGrade: TaskGrade.D2,
78+
},
79+
{
80+
point: '500',
81+
task: 'E、F',
82+
lowerGrade: TaskGrade.Q1,
83+
upperGrade: TaskGrade.D3,
84+
},
85+
{
86+
point: '525',
87+
task: 'F',
88+
lowerGrade: TaskGrade.D1,
89+
upperGrade: TaskGrade.D3,
90+
},
91+
{
92+
point: '550',
93+
task: 'F',
94+
lowerGrade: TaskGrade.D2,
95+
upperGrade: TaskGrade.D4,
96+
},
97+
{
98+
point: '575',
99+
task: 'F、G',
100+
lowerGrade: TaskGrade.D3,
101+
upperGrade: TaskGrade.D4,
102+
},
103+
{
104+
point: '600',
105+
task: 'G',
106+
lowerGrade: TaskGrade.D3,
107+
upperGrade: TaskGrade.D4,
108+
},
109+
{
110+
point: '625',
111+
task: 'G',
112+
lowerGrade: TaskGrade.D3,
113+
upperGrade: TaskGrade.D5,
114+
},
115+
{
116+
point: '650',
117+
task: 'G',
118+
lowerGrade: TaskGrade.D4,
119+
upperGrade: TaskGrade.D5,
120+
},
121+
{
122+
point: '675',
123+
task: 'G',
124+
lowerGrade: TaskGrade.D5,
125+
upperGrade: TaskGrade.D6,
126+
},
127+
];

src/lib/constants/urls.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,6 @@ export const AOJ_PCK_URL: string = 'https://pro-ktmr.github.io/aoj-pck/';
2222
export const ICPC_JAPAN_PROBLEMS_URL: string = 'https://icpc-japan-problems.irrrrr.cc/';
2323

2424
export const GITHUB_URL: string = 'https://github.com/AtCoder-NoviSteps/AtCoderNoviSteps';
25+
26+
export const TASK_GRADE_CRITERIA_SHEET_URL: string =
27+
'https://docs.google.com/spreadsheets/d/1GJbTRRBsoBaY-CXIr3dIXmxkwacV4nHOTOIMCmo__Ug/';

src/routes/problems/+page.svelte

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
<script lang="ts">
22
import { Tabs } from 'flowbite-svelte';
33
4-
import { compareByContestIdAndTaskId } from '$lib/utils/task.js';
4+
import type { TaskResults } from '$lib/types/task';
5+
6+
import { compareByContestIdAndTaskId } from '$lib/utils/task';
7+
58
import HeadingOne from '$lib/components/HeadingOne.svelte';
69
import TabItemWrapper from '$lib/components/TabItemWrapper.svelte';
7-
import type { TaskResults } from '$lib/types/task';
810
import TaskGradeList from '$lib/components/TaskGradeList.svelte';
11+
import GradeGuidelineTable from '$lib/components/TaskGrades/GradeGuidelineTable.svelte';
912
1013
export let data;
1114
@@ -27,6 +30,11 @@
2730
<TaskGradeList {taskResults} {isAdmin} {isLoggedIn}></TaskGradeList>
2831
</TabItemWrapper>
2932

33+
<!-- Grade guidelines -->
34+
<TabItemWrapper workbookType={null} title="グレードの目安">
35+
<GradeGuidelineTable />
36+
</TabItemWrapper>
37+
3038
<!-- HACK: 以下、各テーブルを実装するまで非表示 -->
3139
<!-- Tags -->
3240
<!-- <TabItemWrapper title="Tags">

0 commit comments

Comments
 (0)