-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.tex
More file actions
222 lines (183 loc) · 27.2 KB
/
main.tex
File metadata and controls
222 lines (183 loc) · 27.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
\documentclass{report}
\pagestyle{plain}
\usepackage{graphicx}
\usepackage[hidelinks]{hyperref}
\usepackage{etoc}
\usepackage[english]{babel}
\usepackage[hashEnumerators,smartEllipses]{markdown}
\usepackage[]{amsthm}
\usepackage[]{amssymb}
\usepackage{upquote}
\usepackage{cprotect}
\usepackage{tabularx}
\usepackage[table]{xcolor}
\usepackage[bottom]{footmisc}
\usepackage[localise]{xepersian}
\settextfont[Scale=1,ExternalLocation=fonts/]{XBZar.ttf}
\setcounter{chapter}{-1}
\title{مسابقه کدناک 5}
\author{}
\date{اردیبهشت 1402}
\begin{document}
\begin{titlepage}
\newcommand{\HRule}{\rule{\linewidth}{0.5mm}}
\center
\textsc{\LARGE دانشکده علوم ریاضی دانشگاه شریف}\\[1.5cm]
\HRule \\[0.4cm]
{ \huge \bfseries پنجمین دوره مسابقه کدناک}\\[0.4cm]
\HRule \\[1.5cm]
\Large \emph{ویژه ورودی های 1401 علوم ریاضی}\\
{\large اردیبهشت 1402}\\[2cm]
\includegraphics[width = 5cm]{images/CodeKnock.png}\\[1cm]
\vfill
\end{titlepage}
\tableofcontents
\pagebreak
\chapter{معرفی}
پنجمین دورهی مسابقهی کدناک، روز ۲۹ اردیبهشت ۱۴۰۲ در دو بخش الگوریتمی و استراتژیک برگزار شد. تیم برگزاری در آذر ۱۴۰۱ شکل گرفت و شروع به کار کرد. گزارش فنی این مسابقه در دو بخش تنظیم شدهاست: بخش اول مربوط به کارهای پیش از برگزاری مسابقه و بخش دوم مربوط به کارهای حین برگزاری است. \\\\
برای ارتباط با نویسندهی گزارش از ایمیل \href{mailto:ptorbatii@gmail.com}{ptorbatii@gmail.com} استفاده کنید.
\pagebreak
\chapter{پیش از برگزاری}
\localtableofcontents
\pagebreak
\section{اقدامات اولیه}
\subsection{گیتهاب}
برای ساماندهی فایلهای مربوط به مسابقه، از ابتدا یک Organization گیتهاب مربوط به مسابقه ساخته شد. قرار بر این شد که تمام فایلهایی که هر یک از اعضای تیم برگزاری برای مسابقه ایجاد میکنند، در این فضا قرار داده شود. روش مرتبسازی هم به این شکل بود: \\
هر یک از اعضای تیم، یک مخزن خصوصی
(\lr{private repository})
به نام خود داشتند. دسترسی به این مخزن تنها برای کاربر متناظرش ممکن بود و از آن برای نگهداری فایلهای کماهمیت استفاده میشد. \\
علاوه بر آن، هر بخش بزرگ از کار (مانند صورت جلسات، طرحهای گرافیکی، پروپوزال، کارتهای اعضای تیم و \dots) یک مخزن خصوصی داشت که افراد لازم به آن دسترسی داشتند. \\
نحوه تعریف سطوح دسترسی هم به گونهای بود تا دسترسیهای کمینه داده شود. دسترسی نوشتن به هر مخزن تنها به کسانی که نیاز داشتند و دسترسی خواندن نیز تنها به کسانی که نیاز داشتند داده شد. برای دو مخزن خاص، دسترسی خواندن عمومی تعریف شد (مخزن عمومی بود) تا عموم افراد بتوانند از آنها استفاده کنند. \\
ضمنا تعدادی تیم تعریف شد تا تخصیص دسترسیها آسانتر انجام شود. \\
برای توضیح بیشتر در مورد هر یک از مخازنی که در گیتهاب کدناک ۱۴۰۱ وجود دارد، به \autoref{ch:توضیح مخازن گیتهاب} مراجعه کنید.
\subsection{گروه تلگرام}
برای هماهنگی کارها و انتقال تجربه و راهنمایی، یک گروه تلگرام با عضویت اعضای تیم کدناک ۱۴۰۱، به همراه چند نفر از اعضای تیمهای قبلی کدناک ایجاد شد. \\
همچنین یک گروه متشکل از مسئولین تیمهای برگزاری کدناک در دورههای مختلف وجود داشت که مسئولین این دوره نیز به آن اضافه شدند.
\subsection{آرشیو}
آرشیو سوالات کدناک سال پیش هم از آنها گرفته شد و در گیتهاب قرار گرفت.
\subsection{صورت جلسات}
صورت جلسات مربوط به برگزاری کدناک نوشته و در گیتهاب قرار داده میشد.
\subsection{کانال تلگرام}
دو مسئول مسابقه ادمین کانال شدند. اونرشیپ کانال دست یکی از برگزارکنندگان قبلی بود که در زمان نگارش این گزارش، در حال انتقال به اکانت همبند است تا فرآیند اضافه کردن ادمینهای جدید آسانتر شود.
\subsection{ایمیل}
یک اکانت گوگل برای کدناک ساخته شد تا برای ارسال و دریافت ایمیل از آن استفاده شود.
\subsection{جلسات آموزشی}
به دلیل ضعف دانشجویان در درس مبانی برنامهنویسی، چهار جلسه آموزش و رفع اشکال برنامهنویسی توسط تیم کدناک در اواخر آذر و اوایل دیماه ۱۴۰۱ برگزار شد. در این جلسات از صفر آموزش برنامهنویسی به شرکتکنندگان داده شد و سوالات مرتبط حل شد. این جلسات به صورت آنلاین در \lr{Google Meet} برگزار شدند. همچنین با استفاده از \lr{OBS Studio} ضبط شدند و بعدا فایل ویدیوی ضبط شده و کدهای زدهشده در کلاس در اختیار دانشجویانی که توانایی شرکت در جلسه آنلاین را نداشتند قرار داده شد. برای میزبانی این فایلها از گیتهاب و گوگل درایو استفاده شد.
\subsection{گرافیک}
طراحی گرافیک (لوگو، پوستر و \dots) انجام شد و فایلهای نهایی روی گیتهاب قرار گرفت.
\section{وبسایت}
\subsection{دیپلوی اولیه}
دامین کدناک (\verb|codeknock.ir|) در حال حاضر به آیپی ماشین مجازی همبند اشاره میکند. خود دامین نیز در اختیار علیرضا توفیقی محمدی (\href{mailto:atofighim@gmail.com}{atofighim@gmail.com}) است. \\
در دوره کدناک ۱۴۰۱ به دلیل کمبود وقت تصمیم گرفتیم از سایت کدناک قبلی که با وردپرس طراحی شده بود استفاده کنیم. این وبسایت روی ماشین همبند موجود بود. در هنگام بالا آوردن سرویس با ارورهای عجیبی مواجه میشدیم که با پاک کردن دو فایل \verb|ib_logfile0| و \verb|ib_logfile1| حل شد. سپس متوجه شدیم که سایت قبلی به دلیل باگ امنیتی وردپرس مورد حمله قرار گرفته بود و تعداد زیادی مدیا و صفحهی اضافی ایجاد شده بود که با نوشتن اسکریپت این صفحهها و مدیاها را پاک کردیم. رمز اکانت ادمین وردپرس نیز مشخص نبود بنابرین از روی سرور آن را ریست کردیم. \\
لازم به ذکر است که وبسابت و دیتابیس مربوط به آن با استفاده از داکر روی ماشین همبند دیپلوی شد. روی این ماشین وبسرور \verb|traefik| نصب و حاضر است و با تنظیم لیبلهای درست داکر، خودبهخود درخواستهای مربوطه را به کانتینر شما میفرستد.
\subsection{قرار دادن اطلاعات}
پس از دیپلوی وبسایت، اطلاعات موجود در آن را با اطلاعات کدناک جدید جایگزین کردیم. از جمله این اطلاعات تاریخها، پوستر مسابقه و لوگوی اسپانسرها بود.
\subsection{ثبت نام}
برای ثبت نام از پلاگین \lr{Forminator} وردپرس استفاده کردیم و فرم ثبت نام را روی وبسایت قرار دادیم. پس از اتمام مهلت ثبت نام، از نتایج فرم خروجی \lr{csv} گرفتیم. به دلیل تغییر زمان برگزاری مسابقه، این فرآیند دو بار انجام شد. \\
پس از اتمام مهلت ثبتنام، ارسالهای فرم بررسی شد و به ارسالهای معتبر ایمیل تایید و به ارسالهای نامعتبر ایمیل تکمیل اطلاعات فرستاده شد. \\
\section{ایمیل}
جهت فرستادن ایمیلهای متعدد با قالب یکسان، ابزار \href{https://github.com/CodeKnock1401/GMailBulkSender}{GMailBulkSender} توسعه داده شد. با استفاده از این ابزار میتوان ایمیلهایی فرستاد که همه یک قالب دارند اما اطلاعات هر ایمیل به طور جداگانه در آن قالب قرار داده میشود. برای اطلاعات بیشتر در مورد این ابزار، فایل \verb|README.md| را مطالعه کنید.
\section{طراحی سوالات}
طراحی سوالات در چند جلسه گروهی انجام شد. سپس تیمی برای نوشتن متن سوالات و تیمی برای نوشتن تستکیسها مشخص شد.
\subsection{متن سوالات}
متن سوالات در نهایت با \LaTeX حروفچینی شد. سوالات در دو قالب جداگانه آماده شدند: در یک قالب کل سوالات در یک فایل قرار داشتند و در قالب دیگر هر سوال یک فایل جداگانه بود. قالب اول برای دفترچه سوالات و قالب دوم برای توضیح هر سوال در جاج استفاده شد. فایلهای منبع و خروجی تمام سوالات در هر دو قالب، در گیتهاب موجود است.
\subsection{تستها}
تستهای سوالات در قالب یک برنامهی صحیح و یک مجموعه از ورودیها طراحی شد. تعدادی اسکریپت کمکی و فایل متادیتا هم در کنار این فایلها وجود دارند. \\
تستها با ابزار \verb|tps| باید تولید میشدند، اما پارسا هنگام آمادهسازی سوالات از این موضوع بیخبر بود، بنابرین خودش تعدادی اسکریپت برای این کار نوشت که در ریپوی شخصیاش در گیتهاب موجودند.
\section{طراحی بازی استراتژیک}
ایدهی بازی (بتلشیپ) در یکی از جلسات مطرح و تایید شد. مابقی کارها به طور فردی توسط پارسا انجام شد. این کارها عبارت بودند از:
\subsection{نوشتن متن توضیح چالش}
این متن در همان قالب مربوط به سوالات نوشته شد.
\subsection{طراحی API}
باید مشخص میشد که کد شرکتکنندگان به چه طریق با داور ارتباط برقرار کند. همچنین به اینکه چطور کد شرکتکنندگان مختلف با هم تداخل پیدا نکند نیز باید فکر میشد.
\subsection{آمادهسازی کد کلاینت نمونه}
برای فهم بهتر شرکتکنندگان، یک کلاینت نمونه نوشته شد و در اختیارشان قرار گرفت.
\subsection{آمادهسازی سیستم داوری}
سیستم داوری در قالب یک برنامه جاوا طراحی شد که کلاسهای کلاینتها را میخواند و به نوبت آنها را بازی میداد. همچنین یک کد مجزا برای انجام این کار به صورت اتوماتیک برای تمام تیمها نوشته شد.
\subsection{آمادهسازی نحوه داوری}
قرار بود که داوری به صورت دوحذفی انجام شود. متاسفانه به اینکه دقیقا چطور این اتفاق بیفتد فکر نشده بود و مجبور شدیم دقایقی پیش از اختتامیه سیستم دوحذفی را طراحی کنیم.
\chapter{هنگام برگزاری}
\localtableofcontents
\pagebreak
\section{آمادهسازی جاج}
\subsection{انتخاب سیستم جاج}
در ابتدا انتخاب اساسییی که باید انجام میشد این بود که آیا از کوئرا استفاده کنیم یا خودمان جاج داشته باشیم. با توجه به محدودیتهای کوئرا در شرایط مشابه (به عنوان مثال، هنگامی که تعداد زیادی تیم متصل به یک اینترنت باشند، ممکن است در اثر ریفرش کردن همزمان آنها کوئرا آیپی را مسدود کند.) تصمیم گرفتیم خودمان جاج داشته باشیم. در مورد سیستم جاج نیز با توجه به اینکه سالهای گذشته از \lr{DOMJudge} استفاده شده بود، تصمیم گرفتیم این دوره نیز از همین سیستم استفاده کنیم. البته بیشتر جاجهای معروف عملکرد مشابهی دارند و میتوان از آنها نیز استفاده کرد.
\subsection{دیپلوی اولیه}
سیستم \lr{DOMJudge} دو قسمت دارد: سرور اصلی و سرورهای جاج. سرور اصلی وبسایت جاج را ارائه میدهد و سرورهای جاج ارسالها را از سرور اصلی دانلود کرده، اجرا کرده و نتیجه را به سرور اعلام میکنند. \\
سرور اصلی روی ماشین همبند و با استفاده از داکر دیپلوی شد. \\
برای سرورهای جاج، طبق پیشنهادات سایت \lr{DOMJudge}، به جای استفاده از سرورهای مجازی، از لپتاپ یکی از اعضای تیم برگزاری استفاده کردیم. توصیه اکید ما نیز این است که برای سرورهای جاج از پیشنهادات \lr{DOMJudge} پیروی کنید (سیستمها مجازی نباشند، قابلیت \lr{HyperThreading} فعال نباشد، روی هستهی \verb|0| پردازنده اجرا نشود و \dots). \\
البته برای اطمینان، یک سرور جاج نیز روی سرور شخصی پارسا آماده به کار (و غیرفعال) بود تا در صورتی که مشکلی برای سرورهای جاج اصلی پیش آمد، از آن استفاده کنیم. \\
توجه کنید در صورتی که سختافزار مربوط به سرور جاج را تغییر دهید، بهتر است محدودیت زمان سوالها را مناسب سرور جدید تنظیم کنید. همچنین، به همین دلیل، بهتر است سرورهای جاج دارای سختافزار یکسان یا لااقل مشابه باشند. \\
فایلهای \lr{Docker Compose} مربوط به هر دو سرور، در گیتهاب موجود است.
\subsection{آپلود اطلاعات تیمها}
آپلود اطلاعات تیمها روی سرور به صورت دستی انجام شد (تا جایی که یادمه!). از آنجا که تعداد تیمها نسبتا کم بود، و همچنین به دلیل ضعف مستندات \lr{DOMJudge} در این زمینه، این کار راحتتر از انجام آن به صورت اتوماتیک بود. پسورد تیمها به طور رندوم تولید و نگهداری شد. یوزرنیم تیمها به دلیل حفظ یک قالب یکسان، \verb|teamXX| گذاشته شد که در آن \verb|XX| بین \verb|01| تا \verb|20| بود. برای هر تیم تنها یک اکانت ساخته شد.
\subsection{آپلود سوالات}
برای هر سوال، یک \lr{problem package} مطابق فرمتی که در مستندات جاج توصیف شده تولید شد و سپس این پکیجها را روی سرور آپلود کردیم. فایلهای مربوطه را میتوانید در گیتهاب ببینید.
\section{تست کردن کانتست}
\subsection{تست کانتست الگوریتمی}
با انتخاب دو تیم دونفره از بین اعضای تیم برگزاری که نقشی در طراحی سوالات نداشتند و دانشجویان سالهای بالاتر، این افراد به دادن کانتست مشغول شدند تا ایرادات احتمالی آن مشخص شود. برای این منظور یک کانتست جداگانه و دو اکانت روی جاج برای تست ساخته شد. \\
در جریان تست، متوجه شدیم که تستهای یکی از سوالات ایراد دارد. همچنین از ارسالهای تیم تست برای تنظیم محدودیت زمانی ارسالهای کانتست اصلی استفاده شد. ضمنا با توجه به غریب بودن محیط جاج، تصمیم گرفتیم ابتدای کانتست بخشهای مختلف سیستم را به شرکتکنندگان معرفی کنیم. \\
\subsection{تست کانتست استراتژیک}
برای مسابقه استراتژیک نیز یک دور تست انجام شد، که البته این تست خوب طراحی نشده بود و هنگام برگزاری مسابقه اصلی با مشکلات پیشبینینشده مواجه شدیم.
\section{چاپ و آمادهسازی سوالات}
سوالات مسابقه شب قبل از برگزاری چاپ شدند. دو دفترچه مجزا یکی برای مسابقه الگوریتمی و یکی برای مسابقه استراتژیک در نظر گرفته شده بود. در دفترچه مربوط به مسابقه الگوریتمی، چند برگ کاغد سفید نیز در انتهای دفترچه قرار داده شد تا در صورت نیاز به عنوان چرکنویس استفاده شود. پس از آمادهسازی دفترچهها، آنها در کمد پارسا در دانشکده قرار گرفتند.
\section{آمادهسازی پکها}
کارتهایی شامل یوزرنیم و پسورد تیمها در جاج طراحی و چاپ شد و صبح روز مسابقه به آنها داده شد. \\
همچنین کارتهای شناسایی تیم برگزاری، شرکتکنندگان و اسپانسرها طراحی و چاپ شد.
\section{روز برگزاری}
\subsection{پیش از شروع مسابقه}
صبح روز برگزاری، به آمادهسازی سرور جاج پرداختیم. اتفاق پیشبینینشدهای که رخ داد زیاد بودن حجم ایمیج داکر مربوط به سرور و در نتیجه طول کشیدن بیش از حد این پروسه بود که تا حدود ۱۵ دقیقه پس از شروع رسمی مسابقه ادامه داشت. قرار شد از سرور جاج بکآپ موقتا استفاده شود تا سرور اصلی آماده شود. البته در ۱۵ دقیقه آغازین خوشبختانه کسی ارسالی انجام نداد. همچنین تعدادی از شرکتکنندگان برای اتصال به اینترنت دانشگاه در محل برگزاری مسابقه به مشکل بر خوردند که با کمک تیم برگزاری مشکلشان حل شد. یک نفر از شرکتکنندگان نیز لپتاپ به همراه نداشت که لپتاپ یکی از اعضای تیم برگزاری در اختیارش قرار گرفت. \\
دو نفر از اعضای تیم برگزاری تعیین شدند تا به \lr{clarification}ها پاسخ دهند. همچنین یک نفر قرار شد دائما به پایش و نظارت روی سیستم جاج مشغول باشد.
\subsection{مسابقه الگوریتمی}
در ابتدای مسابقه، لینک جاج و توضیحات مربوط به کار کردن با آن به شرکتکنندگان داده شد. سپس توضیح دادیم که در صورتی که سوال داشتند تنها از طریق سیستم \lr{clarification} مطرح کنند تا روند عادلانه پاسخ دادن حفظ شود. همچنین پسورد اینترنت محل برگزاری روی پروژکتور قرار داده شد و به شرکتکنندهها توضیح دادیم که برای اتصال به جاج، تنها اتصال به شبکه دانشگاه کافی است و نیازی نیست به اینترنت متصل باشند. تعدادی از شرکتکنندهها نیز از اینترنت شخصی استفاده کردند. \\
یک اکانت روی جاج با نوع دسترسی بادکنک نیز برای افرادی که بادکنکها را توزیع میکردند، ساخته شد. \\
سپس روی پروژکتور سالن، جدول امتیازات زنده را قرار دادیم. البته جدول امتیازات طبق طراحی، دقایقی پیش از پایان مسابقه فریز میشد. \\
پس از مسابقه الگوریتمی، پاسخهای ارسالی تیمها دانلود شد و از \lr{moss} برای تشخیص تقلبهای احتمالی استفاده شد. پس از اطمینان از این موضوع، نتایج نهایی ذخیره شد و کانتست الگوریتمی روی سیستم جاج غیرفعال شد. \\
همچنین به خاطر کانتست استراتژیک، فرمت مجاز ارسال به جاج از فایل جاوا به فایل زیپ تغییر کرد. همچنین جاج کردن ارسالها برای این کانتست غیرفعال شد.
\subsection{مسابقه استراتژیک}
ابتدا توضیحات مربوط به مسابقه به شرکتکنندگان ارائه شد. تعدادی از آنها کاغذ مربوط به اطلاعات ورود به جاج را دور انداخته بودند که از روی گیتهاب با کمک تیم برگزاری پسوردشان را دوباره به آنها اطلاع دادیم. \\
در طول برگزاری متوجه شدیم که برنامهای که برای تست کلاینتها به شرکتکنندگان داده شده بود مشکل دارد و درست اجرا نمیشود. یکی از مشکلات این بود که برنامه با نسخهی آخر جاوا کامپایل شده بود در حالی که نسخهی جاوای بعضی از شرکتکنندگان قدیمی بود. این مشکل با کامپایل دوبارهی برنامه با جاوای قدیمیتر و توزیع دوبارهی فایل حل شد. مشکل دوم مربوط به نحوهی اجرای آن بود که با مراجعه تکبهتک به آنها راه حل دستی برای برطرف کردنش اعمال شد. \\
پس از اتمام مهلت مسابقه، کدها به صورت چشمی برای تقلب بررسی شدند. \\
در نهایت نیز در اختتامیه داوری کدها به صورت زنده انجام شد و شرکتکنندگان مسابقات مهم را روی پروژکتور مشاهده کردند. \\
\appendix
\chapter{توضیح مخازن گیتهاب}
\label{ch:توضیح مخازن گیتهاب}
\section{مخازن شخصی}
طبق توضیحات، هر کس یک مخزن شخصی داشت که تنها خودش به آن دسترسی داشت. از این مخازن برای نگهداری فایلهای بیاهمیت مربوط به مسابقه استفاده میشد تا در صورت نیاز، دسترسی به این فایلها سادهتر باشد.
\cprotect\section{\verb|1400Archive|}
این مخزن شامل فایلهای مربوط به دوره قبلی است که از مسئولین دوره قبلی گرفته شد.
\cprotect\section{\verb|discussions|}
این مخزن برای استفاده از قابلیت \lr{discussion} گیتهاب ایجاد شده بود. البته در نهایت استفادهای از این قابلیت نکردیم.
\cprotect\section{\verb|Training|}
این مخزن شامل کدهای جلسات آموزشی کدناک است. فیلم جلسات هم به صورت \lr{attachment} در \lr{release}ها قرار داده شدهاند.
\cprotect\section{\verb|meeting—notes|}
این مخزن شامل صورت جلسات تیم برگزاری است.
\cprotect\section{\verb|proposal|}
این مخزن شامل فایل پروپوزال مسابقه است. دقت کنید که یکی از فایلها به اشتباه به جای اینکه در خود مخزن باشد، در کامنتهای یکی از کامیتهاست!
\cprotect\section{\verb|judge_config|}
این مخزن شامل فایلهای داکر کامپوز جاج است. فولدر \lr{client} مربوط به سرورهای جاج و فولدر \lr{server} مربوط به سرور اصلی است.
\cprotect\section{\verb|registration_data|}
این مخزن شامل اطلاعات ثبت نامهاست.
\cprotect\section{\verb|credential_cards|}
این مخزن شامل سورس و فایل نهایی کارتهای یوزرنیم و پسورد تیمهاست.
\cprotect\section{\verb|game—description|}
این مخزن شامل سورس و فایل نهایی متن توضیحات مسابقه استراتژیک است.
\cprotect\section{\verb|misc|}
این مخزن شامل اطلاعات اضافی و بهدردنخور است.
\cprotect\section{\verb|graphics|}
این مخزن شامل هویت بصری و سایر طرحهای گرافیکی مسابقه به همراه کارتهای شناسایی است.
\cprotect\section{\verb|tests|}
این مخزن شامل سورس تستهای سوالات مسابقهی الگوریتمی است.
\cprotect\section{\verb|maincontest—questions|}
این مخزن شامل سورس و فایل نهایی سوالات مسابقه الگوریتمی است.
\cprotect\section{\verb|problem_packages|}
این مخزن شامل \lr{problem package} سوالات است که برای آپلود در جاج ساخته شدهاند.
\cprotect\section{\verb|Battleship|}
این مخزن شامل سورس کد مربوط به مسابقه استراتژیک است. این کد شامل سیستم داوری و نمونههای دادهشده به شرکتکنندگان است.
\cprotect\section{\verb|GMailBulkSender|}
این مخزن مربوط به ابزار فرستادن ایمیل گروهی است.
\cprotect\section{\verb|SubmissionDownloader|}
این مخزن مربوط به ابزار دانلود کدهای سابمیتشده است.
\cprotect\section{\verb|TechnicalReport|}
این مخزن شامل سورس و فایل نهایی این گزارش است.
\end{document}