+ محدودیت زمان: ۱ ثانیه
+ محدودیت حافظه: ۲۵۶ مگابایت
----------
خنگویچ یکی از تنبلترین دانشجویان دانشگاه ویچستان است.
یک روز که او سر کلاس درس استاد ویچدان نشسته بود، استاد مشغول درس دادن تعدادی قضیه در مورد مقسومعلیهها بود و سوال زیر را مطرح کرد.
به ازای تمام $i$هایی که $1\le i \le n$ است، مقسومعلیههای $i$ را مینویسیم. حال استاد از شاگردان میخواد تا تعداد کل اعداد نوشته شده و جمع آن اعداد را به دست آورد.
به خنگویچ کمک کنید تا جواب سوالش را پیدا کند (بلکه کمتر احساس نادانی کند).
# ورودی
در تنها سطر ورودی عدد $n$ آمده است که نشاندهندهی تعداد مجموعههای نوشته شده بر روی تخته است.
$$ 1 \le n \le 5\ 000$$
# خروجی
در تنها خط خروجی دو عدد چاپ کنید که اولی نشاندهندهی تعداد اعداد روی تخته و دومی نشاندهندهی جمع اعداد روی تخته میباشد.
# مثال
## ورودی نمونه ۱
```
3
```
## خروجی نمونه ۱
```
5 8
```
مجموعههای نوشته شده بر روی تخته عبارت است از {۱} به ازای عدد ۱، {۲ ،۱} به ازای عدد ۲ و {۳ ،۱} به ازای عدد سه. در نتیجه ۵ عدد روی تخته نوشته شده است که مجموع آنها برابر ۸ میباشد.
## ورودی نمونه ۲
```
7
```
## خروجی نمونه ۲
```
16 41
```
الگوریتمی - مقسومعلیههای دردسرساز
+ محدودیت زمان: ۱ ثانیه
+ محدودیت حافظه: ۲۵۶ مگابایت
----------
خنگویچ بعد از حل سوال قبل (که آن هم با کمک شما بود) خیلی به خودش مغرور شد و احساس کرد خفنترین آدم روی زمین است.
شدت خود خفنپنداری خنگویچ آنقدر بالا رفت که خواست جلوی شاگرد اول کلاسشان خودی نشان دهد و روی او را کم کند! به همین دلیل، او پیش فنویچ (شاگرد اول کلاس) رفت و گفت هر سوالی میخواهی بده تا برایت حل کنم. فنویچ هم که بیدی نبود که با این بادها بلرزد، در جا تعدادی گراف درخت روی کاغذ کشید و به خنگویچ گفت که اگر میتوانی عدد رنگی یالی همهی این گرافها را به دست بیاور. خنگویچ هم که از کردهی خود پشیمان بود، پیش شما آمد و کمک خواست تا از آبروریزی او جلوگیری شود. به او کمک کنید تا آبرویش حفظ شود (باشد که دیگر عمل زشت خویش را تکرار نکند).
عدد رنگی یالی یک گراف کوچکترین عدد صحیح نامنفی $k$ است به طوری که یالهای گراف را بتوان با $k$ رنگ طوری رنگ کرد که هر دو یالی که یک سر آنها با هم برابر است، رنگ متفاوت داشته باشند.
درخت نیز گراف همبند بدون دور است.
# ورودی
در سطر اول ورودی عدد $n$ آمده است که نمایانگر تعداد رئوس درخت است.
در $i$امین سطر از $n - 1$ سطر بعدی دو عدد $v_i$ و $u_i$ آمدهاند که شماره رئوس دو سر یال $i$ام را نشان میدهند.
$$ 1 \le n \le 200\ 000$$
$$ 1 \le v_i, u_i \le n$$
تضمین میشود گراف ورودی درخت است.
# خروجی
در تنها سطر خروجی عدد یالی رنگی گراف ورودی را چاپ کنید.
# مثال
## ورودی نمونه ۱
```
1
```
## خروجی نمونه ۱
```
0
```
## ورودی نمونه ۲
```
3
1 2
2 3
```
## خروجی نمونه ۲
```
2
```
الگوریتمی - هیچوقت مغرور نشو!
**کد شما باید روی MySQL قابل اجرا باشد.**
بخشی از پایگاه داده بیپتونز که یک سایت آنلاین فروش آهنگ است به شما داده شدهاست.
در حال حاضر این پایگاهداده شامل دو جدول خواننده و آهنگ است.
هر خواننده دارای اسم، ایمیل، شماره حساب و میزان بالانس است. میزان بالانس پولی است که باید به خواننده در ازای فروش آهنگهایش پرداخت کنیم.(در واقع بدهی ما به خواننده در این فیلد ذخیره میشود.)
جدول با نام `singer` دارای Schema ای به شکل زیر است:
| اسم ستون | نوع | تعریف | ملاحظات|
|:------------------:|:----------:|:----------:|:-----------:|
| $name$ | $varchar$ | اسم خواننده | $primary key$ |
| $email$ | $varchar$ | ایمیل خواننده | $$ |
| $account\_number$ | $varchar$ | شماره حساب خواننده | $$ |
| $balance$ | $int$ | طلب خواننده از ما | $$ |
هر آهنگ هم دارای خواننده، اسم آهنگ، اسم آلبوم، آهنگساز و میزان فروش میباشد.(برای راحتی کار فرض کنید هر آهنگ توسط فقط یک نفر خوانده شدهاست)
جدول با نام `song` دارای Schema ای به شکل زیر است:
| اسم ستون | نوع | تعریف | ملاحظات|
|:------------------:|:----------:|:----------:|:-----------:|
| $id$ | $int$ | ایدی رکورد | $primary key$ |
| $name$ | $varchar$ | نام آهنگ | $$ |
| $singer$ | $varchar$ | نام خواننده | $$ |
| $producer$ | $varchar$ | نام آهنگساز | $$ |
| $album$ | $varchar$ | آلبوم آهنگ | $$ |
| $total\_sell$ | $int$ | مجموع فروش آهنگ | $$ |
# مطلوبات
کوئریهای sql خواستهشده از شما موارد زیر است:
(توجه کنید که هر کوئری نمرهای جداگانه دارد و اگر کوئری یک قسمت را نتوانستید بزنید، کوئریهایی که حل کردید را بفرستید و قسمت آن کوئری را خالی بگذارید.)
1. کوئری بنویسید که اسم تمام خوانندههایی که به آنها بدهکار نیستیم(بالانسشان صفر است) به ما بدهد.
2. همانطور که میبینید جدولی برای آهنگسازان موجود نیست، این جدول را بسازید. این جدول تنها باید شامل یک ستون به اسم `name` باشد که نوع آن `varchar` با طول ۲۰ باشد و `primary key` این جدول هم باید همین ستون باشد. همچنین اسم این جدول `producer` میباشد. سپس تمامی آهنگسازهایی که در جدول آهنگ اسمشان ذکر شدهاست را به جدول آهنگسازها اضافه کنید. (چنانچه از چند کوئری برای این بخش استفاده میکنید، حتما در انتهای کوئریها از `;` استفاده کنید)
3. کوئری بنویسید که از بین تمام خوانندهها، خواننده ای را پیدا کند که رتبه دوم بیشترین فروش را در کارهایش با آهنگسازی به نام `dr.dre` داشته است و اسم و مقدار فروش آهنگهایش با این آهنگساز به نام را برگردانید.
# روش پیادهسازی
در یک فایل با نام `code.sql` کد خود را قرار دهید و آن را فشرده (`zip` ) کنید و در سایت بارگذاری نمایید.
کد شما باید به صورت زیر باشد(نام فایل zip مهم نیست).
```
-- Section1
your first query here
-- Section2
your second query here
-- Section3
your third query here
```
پایگاه داده - بیپتونز
شما به تماشای سریال علاقهی زیادی دارید و علاوه بر این علاقه یک گیک هم هستید! برای همین دوست دارید که سریالهایتان را به شکل خودکار بوسیله تورنت دانلود کنید.
شما در یک موتور جستجوی تورنت نام سریال مورد نظرتان را جستجو کرده و نتایج آن را در تعدادی فایل متنی در فولدری با آدرس مشخصی (مثلا `path/to/src`) ذخیره کردهاید. نمونهای از یک فایل نتیجه جستجو:
```
Attack On Titan S03E20 720p WEB x264-URANiME[eztv] 6/17/2019 394 MB 114 37
Attack On Titan S03E20 WEB x264-URANiME Yesterday 172 MB 76 3
Attack On Titan S03E18 1080p WEB x264-URANiME 6/5/2019 1 GB 46 3
Attack On Titan S03E17 720p WEB x264-URANiME[eztv] 5/27/2019 555 MB 41 10
Attack On Titan S02E20 WEB x264-URANiME[eztv] 6/17/2019 171 MB 40 7
Attack on Titan (2013) Season 2 S02 (1080p BluRay x265 HEVC 10bit AAC 5 1 ImE) 5/23/2019 9.4 GB 29 10
[Golumpa] Attack on Titan S3 - 15 (Shingeki no Kyojin S3) [FuniDub 720p x264 AAC] [C3FCE679] 6/10/2019 416 MB 26 3
Attack on Titan (2013) Season 1 S01 (1080p BluRay x265 HEVC 10bit AAC 5 1 ImE) REPACK 5/27/2019 15.4 GB 24 24
Attack On Titan S03E18 WEB x264-URANiME 6/3/2019 200 MB 23 3
Attack On Titan S03E16 720p WEB x264-URANiME[eztv] 5/20/2019 522 MB 23 3
[Golumpa] Attack on Titan S3 - 15 (Shingeki no Kyojin S3) [FuniDub 1080p x264 AAC] [FB26B600] 6/10/2019 1.3 GB 21 4
Attack On Titan S03E19 WEB x264-URANiME Today 196 MB 20 0
Attack On Titan S03E14 720p WEB x264-URANiME[eztv] 5/6/2019 545 MB 19 2
```
هر خط در هر فایل نتیجهی جستجو از درایههایی که بوسیله tab جدا شدهاند تشکیل شدهاست. درایه اول نام تورنت (torrent name) و درایه دوم تاریخ اضافه شدن آن (added time) و درایه سوم حجم این فایل (size) است که با فرمت MB و GB مشخص شدهاست. درایه چهارم تعداد مشارکتکنندگان کامل (seeds) و درایه آخر تعداد مشارکتکنندگان نیمه (leechs) است. (برای اطلاعات بیشتر: یک فایل در تورنت توسط اشخاص به شکل peer-to-peer برای دانلود ارائه میشود، seeds تعداد مشارکتکنندگان آنلاین فعلی است که فایل را به طور کامل دانلود کردهاند و leechs تعداد مشارکتکنندگان آنلاین فعلی است که خود در حال دانلود فایل هستند و تا آنجا که تا اکنون دانلود کردهاند را میتوانند برای بقیه آپلود کنند)
**توجه**: در متن بالا کاراکتر tab به درستی نمایش داده نشدهاست، برای مشاهده نمونه درست [اینجا](https://quera.ir/qbox/view/yzKfzurmQ9/log.txt) را ببینید.
شما باید اسکریپتی بنویسید که فایلهای نتیجه جستجو را از آدرس مشخصی (مثلا `path/to/src`) بخواند و نتایج را بر اساس قسمت دستهبندی کند و سپس به ازای هر قسمت در هر فصل در آدرس مشخص (مثلا اگر آدرس فولدر نتیجه `path/to/dst` باشد) `path/to/dst/x/y` نتایج جستجو برای آن قسمت را مرتب شده بر اساس اولویتهایی که جلوتر گفته خواهد شد بریزد.
یک قسمت با regex روبرو شناخته میشود: `[Ss]\d+[Ee]\d+` و دو عدد مچ شده میتوانند با ۰ شروع شوند و همه بیانگر یک قسمت در فصل هستند. مثلا همه `S03E2` و `S3e002` و `s03e2` یک قسمت هستند. نتیجهی یک جستجو برای یک قسمت است اگر و تنها اگر این regex به شکل کلمه در torrent name آن ظاهر شده باشد (تضمین میشود که حداکثر یکبار به عنوان کلمه در آن ظاهر خواهد شد). بنابراین `serial s3e03 x264` تطابق دارد و ` serial S03E03ks x265` تطابق ندارد.
**نکته**: کلمه دنبالهای متوالی از حروف و ارقام انگلیسی و underline است که آن را نمیتوان از دو طرف ادامه داد.
حال هر نتیجهی جستجو که با regex گفته شده تطابق داشت را اگر در فصل x و قسمت y باشد باید torrent name
ش را در فایل `path/to/dst/x/y` اضافه کنید.
در یک فایل `path/to/dst/x/y` ،
torrent name
های نتیجه باید با اولویت های زیر مرتب شده باشند. یعنی ابتدا اولویت اول، سپس اولویت دوم و سپس اولویت سوم.
1. بر اساس $2 \times seeds + leechs$ از بزرگ به کوچک
2. بر اساس size از کوچک به بزرگ
3. بر اساس torrent name به شکل lexicography (مقایسه معمول رشتهها) از کوچک به بزرگ
شما باید این کار را در اسکریپت `Bash` به نام `magic.sh` انجام دهید که به شکل زیر فراخوانی میشود.
bash magic.sh path/to/src path/to/dst
در فولدر `path/to/src` تنها فایلهای متنی قرار دارند، به عنوان نمونه:
```
src
├── f1
├── file2
└── note.txt
```
و شما باید خروجی را به شکل گفته شده مانند ساختار زیر در فایلها بریزید:
```
dst
├── 2
└── 19
└── 3
├── 1
└── 2
```
به عنوان نمونه، اگر ورودی مثال نتیجهی جستجوی بالا باشد، در فایل مربوط به قسمت ۲۰ فصل ۳ سریال خروجی به شکل زیر است:
```
Attack On Titan S03E20 720p WEB x264-URANiME[eztv]
Attack On Titan S03E20 WEB x264-URANiME
```
# نکات
+ پوشه مقصد ممکن است قبل از اجرای اسکریپت وجود نداشته باشد. در این صورت اسکریپت شما باید پوشه مقصد را بسازد.
+ نام فایلهایی که کپی میشوند نباید تغییر کند.
+ میتوانید فرض کنید ابزارهای زیر بر روی سیستم نصب است. تقریبا تمام ابزارهای رایج گنو در یک توزیع لینوکس نصب هستند، اگر سوالی در مورد وجود ابزار خاصی داشتید سوال بپرسید!
```
cut awk grep sort paste sed xargs tr expr eval seq tee printf echo print cd mkdir ls find ..
```
+ یک فایل Zip شامل اسکریپت `magic.sh` را آپلود کنید.
+ اگر از سیستم عامل mac استفاده میکنید دقت کنید که برخی ابزارها با ابزارهای gnu در لینوکس متفاوت است و عملکردشان ممکن است متفاوت باشد. کد شما باید در لینوکس به درستی کار کند. برای حل این مشکل میتوانید ابزارهای gnu را در مک بریزید و یا سرور مجازی به شکل ساعتی تهیه کنید و کد خود را در آنجا تست کنید.
لینوکس - دانلود سریال
صبا که برنامهنویسی به زبان جاوا را به تازگی شروع کرده و علاقه زیادی هم به مکعبها دارد، این سوال برایش پیشآمده که چه طور میتواند یک مکعب را رنگ کند. با توجه به جزییات زیر به صبا کمک کنید تا مکعبش را رنگ کند.
فایل [Source](https://quera.ir/qbox/download/zcLMFVo8Dk/Cube.java) را دانلود کرده و کلاس `Cube` را ببینید.
مکعبهایی به شکل ماتریسهای سه بعدی از نوع `int` داریم که میخواهیم آنها را رنگآمیزی کنیم. به این صورت که درایههایی که در 6 وجه مکعب قرار میگیرند، رنگ شوند (مقدارشان برابر با 1 شود) و سایر درایهها بیرنگ باشند (مقدارشان برابر با 0 باشد).
متد `coloring` را مطابق با توضیحات دادهشده پیادهسازی کنید.
**نکته**:
+ ابعاد مکعب مورد نظر ممکن است متفاوت باشد. در واقع ممکن است مکعب مستطیل باشد.
به تصویر زیر نگاه کنید:
![مکعب](https://www.dropbox.com/s/e129qvfo3qgnadp/download.jpg?dl=1)
شکل بالا یک آرایه سهبعدی $6*6*6$ است. هر یک از مکعبهای کوچک، در واقع یک درایه از آرایه ورودی هستند که ممکن است در ابتدا هر مقداری داشته باشد.
شما باید درایهها (خانهها)یی که در 6 وجه بیرونی مکعب اصلی هستند را برابر با 1 کنید و سایر درایهها را 0 کنید.
# آنچه باید آپلود کنید
یک فایل **zip** که وقتی آن را باز میکنیم، **فقط** فایل Cube.java را ببینیم.
پروژهای - رنگآمیزی مکعب - جاوا
علی که برنامهنویسی به زبان پایتون را به تازگی شروع کرده و علاقه زیادی هم به مکعبها دارد، این سوال برایش پیشآمده که چه طور میتواند یک مکعب را رنگ کند. نحوه رنگآمیزی مکعب به این گونه است که خانههایی که در حداقل یکی از وجوه مکعب قرار دارند باید رنگ شوند و دیگر خانهها نباید رنگ شوند. با توجه به جزییات زیر به علی کمک کنید تا مکعبش را رنگ کند.
مکعبی به شکل لیست تو در تو سه بعدی داریم که میخواهیم آن را رنگآمیزی کنیم. به این صورت که درایههایی که در 6 وجه مکعب قرار میگیرند، رنگ شوند (مقدارشان برابر با 1 شود) و سایر درایهها بیرنگ باشند (مقدارشان برابر با 0 باشد).
تابع `coloring` را در `cube.py` مطابق با توضیحات دادهشده پیادهسازی کنید.
برای مثال:
```python
def coloring(ls):
# your code here
matrix = [
[
[5, 5, 5],
[5, 5, 5],
[5, 5, 5]
],
[
[5, 5, 5],
[5, 5, 5],
[5, 5, 5]
],
[
[5, 5, 5],
[5, 5, 5],
[5, 5, 5]
]
]
coloring(matrix)
for i in range(len(matrix)):
print("{}th layer:".format(i+1))
for j in matrix[i]:
for k in j:
print(k, end=' ')
print()
```
خروجی کد بالا باید به این شکل باشد:
```python
1th layer:
1 1 1
1 1 1
1 1 1
2th layer:
1 1 1
1 0 1
1 1 1
3th layer:
1 1 1
1 1 1
1 1 1
```
**توجه: ** اضلاع مکعب ممکن است با هم برابر نباشند.
# آنچه باید آپلود کنید
یک فایل **zip** که وقتی آن را باز میکنیم، **فقط** فایل `cube.py` را ببینیم.
پروژهای - رنگآمیزی مکعب - پایتون
صبا که با کمک شما توانست مکعبش را رنگ کند، به این فکر رفته که یک کلاس طراحی کند تا کمک کند امنیت بیشتری داشته باشد. برای همین از شما میخواهد تا کلاسی با جزییات زیر برایش طراحی کنید.
فایل [Source](https://quera.ir/qbox/download/GG0j7yGD6z/Security.zip) را دانلود کرده و کلاس `Security` را ببینید. در این کلاس سه متد وجود دارد که مطابق با توضیحات دادهشده باید آنها را پیادهسازی کنید:
## متد encrypt
یک رشته به عنوان ورودی این متد داده میشود و معادل رمزنگاریشده آن در خروجی برگردانده میشود.
با توجه به توضیحات زیر، معادل رمزنگاریشده ورودی را محاسبه کنید.
+ رشته یونیفرم رشتهای است که تمام کاراکترهایش با هم یکسان باشند. مانند `c` یا `aa` یا `ccc`
+ وزن یک کاراکتر برابر است با کد عددی آن کاراکتر منهای عدد 96. مثلا کد کاراکتر `a` برابر 97 و وزن آن برابر با $$97-96=1$$ است.
+ ابتدا رشته به زیررشتههای یونیفورمش تقسیم میشود و سپس مقدار رمزنگاری شده رشته اصلی، از به هم چسباندن مقدار رمزنگاری شده رشتههای یونیفورم به دست میآید.
+ با در کنار هم قرار دادن وزن تمام زیررشتههای یونیفرمِ یک رشته، یک عبارت عددی به دست میآید که همان معادل رمزنگاریشده رشته ورودی است.
+ برای مثال مقدار رمزنگاری رشته یونیفورم `cccc` که تشکیل شده از چهار زیررشته یونیفرم `c` و `cc` و `ccc` و `cccc` است و مقدار رمزنگاری هر یک از این زیررشتهها، برابر با مجموع وزن کاراکترهایشان است که به ترتیب میشود 3 و 6 و 9 و 12 و در نهایت خواهیم داشت `36912`.
### مثال
**ورودی**
```
abcccdd
```
**خروجی**
```
1236948
```
### توضیح
کلیه زیررشتههای یونیفرم حاصل از رشته ورودی و وزن آنها در ادامه لیست شده:
| وزن | زیررشته یونیفرم |
|:------------------:|:------------------:|
| 1 | a |
| 2 | b |
| 369 | ccc |
| 48 | dd |
که با در کنار هم قرار دادن وزن آنها، به عبارت `1236948` میرسیم.
## متد isSocialAccountInfo
این متد یک رشته به عنوان پارامتر ورودی دریافت کرده و در خروجی مشخص میکند که آیا این رشته حاوی آدرس مربوط به یک اکانت شبکه اجتماعی هست یا نه.
در زمان استخدام، واحد حفاظت و امنیت، آدرس کلیه اکانتهای عمومی (public) افراد را پرسیده و به شکل زیر در اسناد ذخیره کرده است:
`[Social Network Name]:www.[domain]/[Account Name]`
برای مثال آدرس اکانت توییتر علی به این صورت ذخیره شده است:
`Twitter:www.twitter.com/javalover1990`
**نکات**
1. اسم شبکه اجتماعی همواره با حرف بزرگ انگلیسی شروع میشود.
2. دامنه فقط شامل حروف کوچک انگلیسی و عدد و کاراکتر `.` است.
3. آدرس اکانت شامل حرف یا عدد یا علامت زیرخط (`_`) است.
4. اگر بخش `[Account Name]` یا `[domain]` خالی باشد، خروجی این متد باید `false` باشد.
### مثال
**ورودی**
```
Instagram:www.instagram.com/javafan
```
**خروجی**
```
true
```
## متد secure
حال با استفاده از دو متد قبلی، میخواهیم اطلاعات مورد نظر را رمزنگاری کنیم. به این صورت که:
1. با استفاده از متد isSocialAccountInfo بخشهایی که مربوط به اطلاعات حسابهای کاربری است را پیدا کنید.
2. با استفاده از متد encrypt بخش Account Name را رمزنگاری کنید.
### مثال
**ورودی**
ورودی یک متن است که شامل اطلاعات یک کارمند از جمله اطلاعات صفر یا چند حساب کاربری وی در شبکههای اجتماعی مختلف است.
```
FirstName:Ali, LastName:Alavi, BirthDate:1990/02/02 Gender:male Instagram:www.instagram.com/aalavi Degree:Master Twitter:www.twiter.com/alaviii imdb:www.imdb.com/alavi
```
**خروجی**
```
FirstName:Ali, LastName:Alavi, BirthDate:1990/02/02 Gender:male Instagram:www.instagram.com/12121229 Degree:Master Twitter:www.twiter.com/11212291827 imdb:www.imdb.com/alavi
```
# آنچه باید آپلود کنید:
یک فایل **zip** که وقتی آن را باز میکنیم، **فقط** فایل Security.java را ببینیم.
پروژهای - واحد حفاظت و امنیت - جاوا
علی که با کمک شما توانست مکعبش را رنگ کند، به این فکر رفته که یک کلاس طراحی کند تا کمک کند امنیت بیشتری داشته باشد. برای همین از شما میخواهد تا کلاسی با جزییات زیر برایش طراحی کنید.
فایل [source](https://quera.ir/qbox/download/bxarObe6Z0/source.py) را دانلود کرده و کلاس `Security` را ببینید. در این کلاس سه متد وجود دارد که مطابق با توضیحات دادهشده باید آنها را پیادهسازی کنید:
## متد `encrypt(self, s)`
یک رشته به عنوان ورودی این متد داده میشود و معادل رمزنگاریشده آن در خروجی برگردانده میشود.
با توجه به توضیحات زیر، معادل رمزنگاریشده ورودی را محاسبه کنید.
+ ابتدا رشته به زیررشتههای یونیفورمش تقسیم میشود و سپس مقدار رمزنگاری شده رشته اصلی از به هم چسباندن مقدار رمزنگاری شده رشتههای یونیفورم به دست میآید.
+ با در کنار هم قرار دادن وزن تمام زیررشتههای یونیفرمِ یک رشته، یک عبارت عددی به دست میآید که همان معادل رمزنگاریشده رشته ورودی است.
+ رشته یونیفرم رشتهای است که تمام کاراکترهایش با هم یکسان باشند. مانند `c` یا `aa` یا `ccc`
+ برای یک رشته یونیفورم مقدار رمزنگاری این گونه به دست میآید که به ازای هر کاراکتر مقدار رشتهای ضرب وزن آن کاراکتر در تعداد کاراکترهایی که قبلش آمده به علاوه یک را به انتهای جواب اضافه میکنیم. (این کار را از اول رشته ضروع میکنیم و تا آخر آن طی میکنیم.)
+ برای مثال مقدار رمزنگاری رشته یونیفورم `cccc` برابر یا `36912` است.
+ وزن یک کاراکتر برابر است با کد عددی آن کاراکتر منهای عدد 96. مثلا کد کاراکتر `a` برابر 97 و وزن آن برابر با $$97-96=1$$ است.
### مثال
**ورودی**
```
abcccdd
```
**خروجی**
```
1236948
```
### توضیح
کلیه زیررشتههای یونیفرم حاصل از رشته ورودی و وزن آنها در ادامه لیست شده:
| وزن | زیررشته یونیفرم |
|:------------------:|:------------------:|
| 1 | a |
| 2 | b |
| 369 | ccc |
| 48 | dd |
که با در کنار هم قرار دادن وزن آنها، به عبارت `1236948` میرسیم.
## متد `is_social_account_info(self, param)`
این متد یک رشته به عنوان پارامتر ورودی دریافت کرده و در خروجی مشخص میکند که آیا این رشته حاوی آدرس مربوط به یک اکانت شبکه اجتماعی هست یا نه.
در زمان استخدام، واحد حفاظت و امنیت، آدرس کلیه اکانتهای عمومی (public) افراد را پرسیده و به شکل زیر در اسناد ذخیره کرده است:
`[Social Network Name]:www.[domain]/[Account Name]`
برای مثال آدرس اکانت توییتر علی به این صورت ذخیره شده است:
`Twitter:www.twitter.com/javalover1990`
**نکات**
1. اسم شبکه اجتماعی همواره با حرف بزرگ انگلیسی شروع میشود.
2. دامنه فقط شامل حروف کوچک انگلیسی و عدد و کاراکتر `.` است.
3. آدرس اکانت شامل حرف یا عدد یا علامت زیرخط (`_`) است.
### مثال
**ورودی**
```
Instagram:www.instagram.com/javafan
```
**خروجی**
```
True
```
## متد `secure(self, info)`
حال با استفاده از دو متد قبلی، میخواهیم اطلاعات مورد نظر را رمزنگاری کنیم. به این صورت که:
1. با استفاده از متد `is_social_account_info` بخشهایی که مربوط به اطلاعات حسابهای کاربری است را پیدا کنید.
2. با استفاده از متد `encrypt` بخش Account Name را رمزنگاری کنید.
### مثال
**ورودی**
ورودی یک متن است که شامل اطلاعات یک کارمند از جمله اطلاعات صفر یا چند حساب کاربری وی در شبکههای اجتماعی مختلف است.
```
FirstName:Ali, LastName:Alavi, BirthDate:1990/02/02 Gender:male Instagram:www.instagram.com/aalavi Degree:Master Twitter:www.twiter.com/alaviii imdb:www.imdb.com/alavi
```
**خروجی**
```
FirstName:Ali, LastName:Alavi, BirthDate:1990/02/02 Gender:male Instagram:www.instagram.com/12121229 Degree:Master Twitter:www.twiter.com/11212291827 imdb:www.imdb.com/alavi
```
# آنچه باید آپلود کنید:
یک فایل **zip** که وقتی آن را باز میکنیم، **فقط** فایل `security.py` را ببینیم.
پروژهای - واحد حفاظت و امنیت - پایتون
در این سوال برای سادهتر کردن مدیریت خطاها و مرتب کردن استثناها میخواهیم تمام خطاهایی که رخ میدهد
را با یک قرارداد واحد در کلاسی به نام `ExceptionProxy` ذخیره کنیم.
برای این کار به ازای هر خطایی که رخ میدهد یک شی از کلاس `ExceptionProxy` میسازیم که دارای دو
خصوصیت است.
این خصوصیات عبارتند از ( `e` یک شی از کلاس `ExceptionProxy` است):
+ متن استثنای رخ داده. (تبدیلشده استثنا به رشته): `e.msg`
+ تابعی که باعث ایجاد استثنا شده: `e.function`
فایل [Solution.java](https://quera.ir/qbox/download/U8mN5W9bp1/Solution.java) را دانلود کرده و محتوای آن را ببینید.
از شما میخواهیم متد `transformException()` را پیادهسازی کنید. این متد یک لیست از توابع ورودی میگیرد. سپس هر کدام از توابع را صدا میکند (توابع بدون آرگومان هستند) و استثناهایی که رخ میدهد را با قرارداد بالا
به شیای از `ExceptionProxy` تبدیل کرده و در نهایت لیست خطاهای تبدیلشده را به همان ترتیب توابع
بر میگرداند. دقت کنید که اگر تابعی بدون خطا اجرا شد باید یک شی `ExceptionProxy` ساخته و مقدار `msg` آن را با `"OK!"`مقداردهی کنید.
### مثال
با اجرای متد `main` در کلاس `Solution` خروجی زیر باید در کنسول چاپ شود:
```
msg: / by zero
function: Devide[1/0]
msg: OK!
function: Devide[1/1]
```
# آنچه باید آپلود کنید:
یک فایل **zip** که وقتی آن را باز میکنیم، **فقط** فایل Solution.java را ببینیم.
پروژهای - چیراکسی؟ - جاوا
در این سوال برای سادهتر کردن مدیریت خطاها و مرتب کردن استثناها میخواهیم تمام خطاهایی که رخ میدهد را با یک قرار داد واحد در کلاسی به نام `ExceptionProxy` ذخیره کنیم.
برای این کار به ازای هر خطایی که رخ میدهد یک شی از کلاس `ExceptionProxy` میسازیم که دارای دو خصوصیت است.
این خصوصیات عبارتند از (`e` یک شی از کلاس `ExceptionProxy` است):
+ متن استثنای رخ داده. (تبدیل شدهی استثنا به رشته): `e.msg`
+ تابعای که باعث ایجاد استثنا شده: `e.function`
از شما میخواهیم تابعای به نام `transform_exceptions()` بنویسید که یک لیست از توابع ورودی میگیرد.
سپس هر کدام از توابع را صدا میکند (توابع بدون آرگومان هستند) و استثناهایی که رخ میدهد را با قرار داد بالا به شیای از `ExceptionProxy` تبدیل کرده و در نهایت لیست خطاهای تبدیل شده را به همان ترتیب توابع برمیگرداند. دقت کنید که اگر تابعای بدون خطا اجرا شد باید یک شی `ExceptionProxy` ساخته و مقدار `msg` آنرا با `"ok!"` مقدار دهی کنید.
کلاس `ExceptionProxy` و تابع `transform_exceptions()` خود را در فایل `solution.py` تعریف کرده و سپس زیپ و ارسال کنید.
به مثال زیر دقت کنید:
```python
class ExceptionProxy(Exception):
# define your class here
def transform_exceptions(func_ls):
# implement your function here
def f():
1/0
def g():
pass
tr_ls = transform_exceptions([f, g])
for tr in tr_ls:
print("msg: " + tr.msg + "\nfunction name: " + tr.function.__name__)
```
خروجی کد بالا باید به شکل زیر باشد.
```
msg: division by zero
function name: f
msg: ok!
function name: g
```
برای ارسال پاسخ یک فایل *Zip* آپلود کنید که شامل فایل `solution.py` است و چیزهای مورد نظر سوال در آن قرار دارد.
پروژهای - چیراکسی؟ - پایتون
در کارت گرافیک برای بالا بردن سرعت، پردازش بخشهای مختلف به صورت موازی انجام میشود. این پردازشها
را میتوان به شکل یک درخت نشان داد. در این سوال به پردازش درختی از توابع میپردازیم.
به شما یک درخت دودویی از توابع به شکل زیر داده می شود.
![درخت دودویی](https://quera.ir/qbox/download/psBE42OL5B/graph)
هر یال جهتدار به این معناست که تابعی که یال از آن خارج شده باید قبل از تابعی که یال به آن وارد شده
محاسبه شود. (یا میتوان گفت تابع دوم برای انجام محاسباتش نیاز به خروجی تابع اول دارد). توابع در سه لیست `fs` و `gs` و `hs` از طریق کلاس `Functions` به شما داده میشوند (برای مثال، `f[0]` همان $f1$ است). در ضمن توجه داشته باشید که تمام توابع بدون آرگومان ورودی هستند.
فایل [Source](https://quera.ir/qbox/download/JrlDUC35CM/Source.zip) را دانلود کرده و محتوای آن را ببینید و متد `solve` را مطابق با توضیحات زیر پیادهسازی کنید.
شما باید این درخت را به ترتیب زیر پردازش کنید:
+ با چهار ترد با نامهای 1 و 2 و 3 و 4: با ترد $i$ام، $fi$ پردازش شود.
+ با دو ترد با نامهای 1 و 2: با ترد $i$ام، $gi$ پردازش شود.
+ با یک ترد با نام 1: با ترد $i$ام، $hi$ پردازش شود.
دقت کنید که محاسبات هر مرحله (هر طبقه درخت) باید به صورت همزمان انجام شود. (برای مثال $f1$ و $f2$ باید
همزمان محاسبه شوند).
## مثال
با اجرای متد `main` از کلاس `Main` خروجی زیر یکی خروجیهای صحیح محتمل است.
```
F1 by 1 - F4 by 4 - F2 by 2 - F3 by 3 - G1 by 1 - G2 by 2 - H1 by 1 -
```
توجه داشته باشید که تمامی `F`ها قبل از `G`ها و تمامی `G`ها قبل از `H`ها چاپ میشود.
# آنچه باید آپلود کنید.
یک فایل zip که وقتی آن را باز میکنیم، **فقط** فایل ThreadSolution.java را ببینیم.
پروژهای - تردکاری - جاوا
در کارت گرافیک برای بالا بردن سرعت پردازش بخشهای مختلف به صورت موازی انجام میشود. این پردازشها را میتوان به شکل یک درخت نشان داد. در این سوال به پردازش درختی از توابع میپردازیم. به شما یک درخت دودویی از توابع به شکل زیر داده میشود.
![](https://quera.ir/qbox/download/psBE42OL5B/graph)
هر یال جهتدار به این معناست که تابعای که یال از آن خارج شده باید قبل از تابعای که یال به آن وارد شده محاسبه شود. (یا میتوان گفت تابع دوم برای انجام محاسبتش نیاز به خروجی تابع اول دارد). توابع در سه لیست `f` و `g` و `h` در فایل `functions.py` قرار دارند.(برای مثال `f[0]` همان $f_1$ است.) (همهی توابع بدون آرگومان هستند برای مثال `f[0]()` تابع $f_1$ را صدا میکند.)
شما باید با ۴ ترد به نامهای `1` و `2` و `3` و `4` این درخت را به ترتیب زیر محاسبه کنید.
+ ابتدا با ترد $i$ام، $f_i$ محاسبه شود.
+ سپس با ترد $i$ام، $g_i$ محاسبه شود.
+ و در نهایت با ترد $i$ام، $h_i$ محاسبه شود.
+ دقت کنید که تردهایی که توابع هر طبقه را اجرا میکنند میتوانند یکسان نداشته باشند و صرفا نامشان `1` و `2` و `3` و `4` باشد.
دقت کنید که محاسبات هر مرحله (طبقهی درخت) باید به صورت همزمان انجام شود. (برای مثال $f_1$ و $f_2$ باید همزمان محاسبه شوند)
از شما میخواهیم برای سریعتر شدن اجرا توابع را به ترتیب ذکر شده (با کمک تردها) صدا کنید.
کد خود را در تابعای به نام `solve` در `solution.py` بنویسید و زیپ و ارسال کنید.
پروژهای - تردکاری - پایتون
یک شرکت فراهمکننده سرویس اینترنت (ISP- Internet Service Provider) دو سال است که شروع به کار کرده و در این مدت برای جذب مشتری بیشتر، صرفا سرویس نامحدود اینترنت و با قیمت مناسب ارایه داده است. این شرکت در این دو سال، میزان و نحوه مصرف هر یک مشتریان خود را با دقت رصد کرده است و حالا که بازار را در دست گرفته و ارایه سرویس نامحدود دیگر برایش مقرون بهصرفه نیست، قصد دارد متناسب با نیازهای مشتریانش، تعدادی سرویس محدود تعریف کرده و به آنها پیشنهاد دهد.
اولین قدم برای این کار، دستهبندی کاربران بر اساس فاکتورهای مختلف است و شما هم به همین دلیل استخدام شدهاید.
فایل [Source](https://quera.ir/qbox/download/BAbfSm5usu/source.zip) را دانلود کرده و محتوای آن را ببینید. اطلاعات مربوط به میزان مصرف هر مشتری در تاریخهای مختلف در شیای از نوع `TrafficUsage` ذخیره شده است و توسط متد `loadAll` در کلاس `TrafficUsageDao` در قالب یک لیست در اختیار شما قرار میگیرد. هر رکورد از این لیست، دارای اطلاعات زیر است:
+ `user`: کاربر
+ `internal`: مشخص میکند که اینترنت مصرفی داخلی بوده یا خارجی
+ `nightly`: مشخص میکند اینترنت مصرفی مربوط به حجم روزانه بوده یا شبانه
+ `date`: تاریخ مصرف حجم اینترنت
+ یک رشته با فرمت yy/MM/dd است (مانند 97/08/25).
+ `usage`: میزان مصرف اینترنت بر حسب مگابایت
در کلاس `TrafficUsageService` قرار است به کمک این دادهها، اطلاعات زیر استخراج شده و در دستهبندی مشتریان مورد استفاده قرار بگیرد:
1. عاشقان رسانههای اجتماعی (**متد socialMediaLovers**):
+ مشتریانی که در طول ماه مورد نظر از سال مورد نظر، مجموع مصرف آنها از اینترنت **خارجی**، از مصرف اینترنت **خارجی** حداقل 90% سایر کاربران فعال در آن ماه بیشتر باشد.
+ مثلا اگر علی در تیر 97 به میزان 50 گیگ اینترنت خارجی مصرف کرده اما حداقل 90% سایر کاربران، هر کدام در تیر 97 مصرفشان از اینترنت خارجی کمتر از 50 گیگ بوده، علی از عاشقان رسانههای اجتماعی در تیر 97 بوده است.
+ منظور از کاربر فعال در یک بازه زمانی خاص، کاربری است که حداقل یک رکورد `TrafficUsage` در آن ماه و به نام آن کاربر ثبت شده باشد.
2. مشتریان عشق دانلود (**متد downloadLovers**):
+ مشتریانی که در طول ماه مورد نظر از سال مورد نظر، مجموع مصرف آنها از اینترنت شبانه، بیش از مجموع مصرف آنها از اینترنت روزانه باشد.
\**نکته**:
+ در هر یک از دو سرویس مورد نظر، به هر دلیلی اگر کاربری پیدا نشود، باید یک لیست خالی برگردانده شود (خروجی متد `null` نباشد).
با اجرای متد `main` در کلاس `Main`، خروجی زیر مورد انتظار است:
```
socialMediaLovers:
a100
downloadLovers:
a100
a101
a102
```
# آنچه باید آپلود کنید:
یک فایل زیپ شامل بستهی com.rahnema.isp.service.impl است. به صورتی که وقتی فایل زیپ را باز میکنیم، دقیقا شاخهی com را ببینیم که درون آن شاخهی rahnema و درون آن شاخهی isp و درون آن شاخه service و درون آن شاخه impl قرار دارد. در داخل شاخهی impl فقط و فقط فایل TrafficUsageServiceImpl.java وجود دارد.
پروژهای - رصد مشتریان - جاوا
یک شرکت فراهمکننده سرویس اینترنت (ISP- Internet Service Provider) دو سال است که شروع به کار کرده و در این مدت برای جذب مشتری بیشتر، صرفا سرویس نامحدود اینترنت و با قیمت مناسب ارایه داده است. این شرکت در این دو سال، میزان و نحوه مصرف هر یک مشتریان خود را با دقت رصد کرده است و حالا که بازار را در دست گرفته و ارایه سرویس نامحدود دیگر برایش مقرون بهصرفه نیست، قصد دارد متناسب با نیازهای مشتریانش، تعدادی سرویس محدود تعریف کرده و به آنها پیشنهاد دهد.
اولین قدم برای این کار، دستهبندی کاربران بر اساس فاکتورهای مختلف است و شما هم به همین دلیل استخدام شدهاید.
فایل [Source](https://quera.ir/qbox/download/hs81xIn4qs/source.zip) را دانلود کرده و محتوای آن را ببینید. اطلاعات مربوط به میزان مصرف هر مشتری در تاریخهای مختلف در شیای از نوع `TrafficUsage` ذخیره شده است و توسط متد `load_all` در کلاس `TrafficUsageDao` در قالب یک لیست در اختیار شما قرار میگیرد. هر رکورد از این لیست، دارای اطلاعات زیر است:
+ `user`: کاربر
+ `internal`: مشخص میکند که اینترنت مصرفی داخلی بوده یا خارجی
+ `nightly`: مشخص میکند اینترنت مصرفی مربوط به حجم روزانه بوده یا شبانه
+ `date`: تاریخ مصرف حجم اینترنت
+ یک رشته با فرمت yy/MM/dd است (مانند 97/08/25).
+ `usage`: میزان مصرف اینترنت بر حسب مگابایت
در کلاس `TrafficUsageService` قرار است به کمک این دادهها، اطلاعات زیر استخراج شده و در دستهبندی مشتریان مورد استفاده قرار بگیرد:
1. عاشقان رسانههای اجتماعی (**متد social_media_lovers**):
+ مشتریانی که در طول ماه مورد نظر از سال مورد نظر، مجموع مصرف آنها از اینترنت **خارجی**، از مصرف اینترنت **خارجی** حداقل 90% سایر کاربران فعال در آن ماه بیشتر باشد.
+ مثلا اگر علی در تیر 97 به میزان 50 گیگ اینترنت خارجی مصرف کرده اما حداقل 90% سایر کاربران، هر کدام در تیر 97 مصرفشان از اینترنت خارجی کمتر از 50 گیگ بوده، علی از عاشقان رسانههای اجتماعی در تیر 97 بوده است.
+ منظور از کاربر فعال در یک بازه زمانی خاص، کاربری است که حداقل یک رکورد `TrafficUsage` در آن ماه و به نام آن کاربر ثبت شده باشد.
2. مشتریان عشق دانلود (**متد download_lovers**):
+ مشتریانی که در طول ماه مورد نظر از سال مورد نظر، مجموع مصرف آنها از اینترنت شبانه، بیش از مجموع مصرف آنها از اینترنت روزانه باشد.
\**نکته**:
+ در هر یک از دو سرویس مورد نظر، به هر دلیلی اگر کاربری پیدا نشود، باید یک لیست خالی برگردانده شود (خروجی متد `None` نباشد).
با اجرای ماژول `main` ، خروجی زیر مورد انتظار است:
```
social media lovers:
a100
download lovers:
a100
a101
a102
```
# آنچه باید آپلود کنید:
یک فایل زیپ آپلود کنید که در ریشه آن یک فایل وجود داشته باشد و آن هم `service.py` باشد.
پروژهای - رصد مشتریان - پایتون
در این سوال قصد داریم یک **صفحهی پاسخگو** طراحی کنیم.
با تغییر اندازهی عرض این صفحه، رنگ پس زمینهی آن تغییر میکند.
صفحهی مورد نظر به شکل زیر خواهد بود:
![Responsive Page](https://quera.ir/qbox/view/HjIz2smgrI/responsive.gif)
# جزئیات
ویژگی `background-color` برای `body`:
+ در صورتی که عرض صفحه کمتر از ۶۰۰ پیکسل است، باید `#F00` باشد.
+ در صورتی که عرض صفحه بین ۶۰۰ تا ۹۰۰ پیکسل (شامل خود ۶۰۰ و ۹۰۰) است، باید `#FF0`باشد.
+ در صورتی که عرض صفحه بیشتر از ۹۰۰ پیکسل است، باید `#0F0` باشد.
تغییرات لازم را در فایل `responsive.html` و در صورت نیاز فایل `.css` مورد نظر خود انجام دهید.
# نکات
- فرض کنید سیستم به اینترنت متصل نیست، بنابراین از ارجاع به فایلهای موجود
در وب (CDN ها) خودداری کنید.
- پروژه را با ساختار زیر ارسال کنید.
```
[your-zip-file-name].zip
├── responsive.html
└── your .css files (Optional)
```
فرانتاند - صفحهی پاسخگو
میخواهیم با استفاده از جاوااسکریپت خالص (بدون استفاده از کتابخانهها) بر اساس دادههای یک API، یک **نمودار ساده** مطابق با شکل زیر رسم کنیم.
![نمودار ساده](https://quera.ir/qbox/view/gV3RL4HDTJ/chart.png)
این دادهها باید به صورت یک نمودار میلهای ساده نمایش داده شوند. برای هر داده، عنوان، توضیحات، رنگ و مقدار (ارتفاع میله) در API داده میشود. با رفتن نشانگر موس روی هرکدام از میلهها، آن میله فعال میشود (رنگ آن تغییر میکند و اطلاعات مربوط به آن در سمت راست نمودار نمایش داده میشود). همچنین با فشردن کلیدهای راست و چپ صفحهکلید، میلهی فعال تغییر میکند. در شکل زیر مثالی از نحوهی عملکرد نمودار را مشاهده میکنید:
![عملکرد نمودار](https://quera.ir/qbox/view/81X7WPQrZn/chart.gif)
# پروژه اولیه
پروژه اولیه را از
[اینجا](https://quera.ir/qbox/download/KXO9Opg22f/simple-chart.zip)
دانلود کنید.
ساختار فایلهای این پروژه به صورت زیر است:
```
simple-chart
├── chart.css
├── chart.html
└── data.json
```
# جزئیات
باید به محض باز شدن صفحه، دادهها را از `data.json` (با متد `GET`) دریافت کنید و نمودار را طبق جزئیات زیر نمایش دهید. کدهای جاوااسکریپت خود را در فایل `chart.js` بنویسید (این فایل را ایجاد کنید). میتوانید در صورت نیاز مواردی به `chart.css` نیز اضافه کنید. اما مجاز به تغییر فایل HTML **نیستید**.
هریک از دادهها شامل یک عنوان (`title`)، توضیحات (`description`)، مقدار (`value`) و رنگ (`color`) است. پاسخ API به شکل زیر است:
```json
{
"labels": {
"x": "Country",
"y": "Population"
},
"items": [
{
"title": "South Africa",
"description": "South Africa is a country ...",
"color": "#253b6e",
"value": 58065097
},
{
"title": "Italy",
"description": "Italy, a European country with a ...",
"color": "#1891ac",
"value": 59216525
},
...
]
}
```
مقدار (`value`) همواره یک عدد صحیح است. رنگها نیز به صورت hex هستند.
کارهایی که پس از دریافت دادهها باید انجام دهید:
## ۱. تنظیم برچسب محورها
باید متن برچسب محور افقی و عمودی را بر اساس مقدار `labels` تنظیم کنید. مثلاً در شکل بالا، متنهای `Population` و `Country` به عنوان برچسب قرار گرفتهاند.
## ۲. رسم نمودار
دادهها ابتدا باید بر اساس مقدار از زیاد به کم مرتب شوند و سپس به ترتیب و به صورت مستطیلهای رنگی داخل عنصر `.chart` نمایش داده شوند.
- عرض همهی میلهها یکسان است و کل عرض نمودار (عنصر `.chart`) را میپوشانند.
- ارتفاع میلهها باید متناسب با مقدار (`value`) باشد و ارتفاع برای داده با بزرگترین مقدار باید به اندازهی ۹۰٪ ارتفاع نمودار (عنصر `.chart`) باشد.
- رنگ هر میله باید بر اساس رنگهای گرفتهشده از API تنظیم شود.
## ۳. میلهی فعال
در هر لحظه باید یکی از میلهها فعال باشد (به رنگ `#fd5f00` نمایش داده شود).
- در ابتدا میلهی اول فعال است.
- با رفتن نشانگر موس روی هر میله، آن میله فعال میشود.
- با فشردن کلیدهای راست و چپ صفحهکلید، میلهی فعال تغییر میکند. توجه کنید که فعال شدن میلهها به صورت حلقوی است. یعنی در صورتی که میلهی انتهایی سمت راست فعال باشد، با فشردن کلید راست میلهی انتهایی سمت چپ فعال میشود و در صورتی که میلهی انتهایی سمت چپ فعال باشد، با فشردن کلید چپ میلهی انتهایی سمت راست فعال میشود.
- دادههای مربوط به میلهی فعال (عنوان، توضیحات و مقدار) باید در سمت راست نمودار نمایش داده شود. هر ۳ رقم مقدار (`value`) باید با ویرگول (`,`) از هم جدا شوند (مطابق شکل).
# نکات
- فرض کنید سیستم به اینترنت متصل نیست، بنابراین از ارجاع به فایلهای موجود در وب (CDN ها) خودداری کنید.
- امکان استفاده از کتابخانههای جاوااسکریپت (مانند jQuery) وجود **ندارد**. کدهای خود را باید تنها با استفاده از امکانات جاوااسکریپت پیادهسازی کنید. هنگام داوری، کدهای جاوااسکریپت به جز `chart.js` حذف میشوند و بررسی میشود که حجم فایل `chart.js` کمتر از ۸ کیلوبایت باشد.
- هنگام داوری، ابعاد و حاشیهی عنصر `.chart` و همچنین محتوای `data.json` مقادیر متفاوتی نسبت به پروژهی اولیه خواهند داشت. بنابراین کد شما نباید به این مقادیر خاص وابسته باشد.
- در صورتی که فایل `chart.html` را به صورت عادی با مرورگر باز کنید، ممکن است هنگام ارسال درخواست برای دریافت `data.json` با خطای `Cross Origin`
از طرف مرورگر مواجه شوید. در این صورت به جای باز کردن مستقیم فایل HTML با مرورگر،
پوشه پروژه را با یک وبسرور (مثلاً
[`python -m http.server`](https://docs.python.org/3/library/http.server.html))
serve
کنید.
- پروژه را با ساختار زیر ارسال کنید.
تغییر تنها در مواردی که با `*` مشخص شده مجاز است
و ارسال سایر فایلها الزامی نیست.
```
[your-zip-file-name].zip
├── chart.css *
├── chart.html
├── chart.js *
└── data.json
```