پس از مرتبسازی تمرین قبلی، *باقر* که باور نمیکرد *سلیب* بتواند آن پروژه را مرتب کند، تصمیم گرفت باری دیگر مهارت او را ارزیابی کند و بفهمد که چگونه موفق شد از مانع قبلی رد شود.
*باقر* به سراغ *سعید* و *مصطفی* برای طرح چالشی پیچیدهتر برای *سلیب* میرود. پس از جلسات فراوان، به این نتیجه میرسند که *باقر* و *سعید* دست به سیاه و سفید نزنند و صرفا چالش پیچیدهای را مطرح کنند و پیادهسازی آن وظیفه *مصطفی* باشد. چالش آنها اینبار به این صورت است که پروژهای شامل تعداد زیادی کامیت (بیش از ۴۰۰۰ کامیت) به سلیب ارائه دهند. درون این پروژه کلیدی مخفی شدهاست و سلیب باید به دنبال آن بگردد. یعنی از بین تمامی کامیتهای پروژه، همگی کامیتهای بدی هستند بهجز **یک کامیت!** سلیب باید کامیت خوب را پیدا کند. تمامی کامیتهای این پروژه از شماره ۱ تا ۴۰۹۶ شمارهگذاری شدهاند به طوری که اولین کامیت پروژه شماره ۱ دارد و کامیت آخر پروژه شماره ۴۰۹۶ دارد. توصیه میکنیم برای مشاهده کامیتهای پروژه از دستور زیر استفاده کنید:
```bash
git log --oneline
```
ساختار پروژه مانند درخت زیر است:
```
SAliB_Verify
├── final_answer.txt
└── try_me.txt
```
در هر کامیت درون فایل `try_me.txt` محتوای جدیدی وجود دارد. محتوای این فایل با توجه به بد یا خوب بودن کامیت و همچنین به فاصله کامیت تا کامیت خوب پروژه متغییر است. این فایل درون هر کامیت یکی از سه حالت زیر را دارد:
1. اگر کامیت، **کامیت بدی** باشد که **پساز** کامیت خوب پروژه باشد (یعنی مثلا کامیت شماره ۱۰ خوب باشد و این کامیت شماره ۱۵ باشد و پیش از کامیت خوب قرار گرفته باشد.). در این صورت محتویات درون فایل `try_me.txt` به شکل زیر است:
```
WRONG
KEY OF THIS COMMIT IS: <mark class="red" title="به جای این عبارت یک رشته هش یکتا درون هر کامیت وجود دارد.">HASH</mark>
GO TO PERVIOUS COMMITS TO FIND THE CORRECT KEY!
```
همانطور که مشاهده میکنید کلید موجود در این کامیت اشتباه است و درون خط آخر این فایل نوشته که کلید درست درون کامیتهای عقبتر از این کامیت وجود دارد.
2. اگر کامیت، **کامیت خوب** پروژه ما باشد، در این صورت محتویات درون فایل `try_me.txt` به شکل زیر است:
```
CORRECT!
CONGRATULATIONS!!!
YOU FINALLY FOUND IT.
KEY OF THIS COMMIT IS: <mark class="red" title="به جای این عبارت یک رشته هش یکتا درون هر کامیت وجود دارد.">HASH</mark>
```
3. اگر کامیت، **کامیت بدی** باشد که **پیش از** کامیت خوب پروژه باشد (یعنی مثلا کامیت شماره ۱۰ خوب باشد و این کامیت شماره ۵ باشد و پیش از کامیت خوب قرار گرفته باشد.). در این صورت محتویات درون فایل `try_me.txt` به شکل زیر است:
```
WRONG
KEY OF THIS COMMIT IS: <mark class="red" title="به جای این عبارت یک رشته هش یکتا درون هر کامیت وجود دارد.">HASH</mark>
GO TO NEXT COMMITS TO FIND THE CORRECT KEY!
```
همانطور که مشاهده میکنید کلید موجود در این کامیت اشتباه است و درون خط آخر این فایل نوشته که کلید درست درون کامیتهای جلوتر از این کامیت وجود دارد.
همچنین **تضمین میشود که** فایل `final_answer.txt`در تمامی کامیتهای پروژه خالی است. وظیفه *سلیب* پیدا کردن **کامیت خوب** پروژه و ذخیرهسازی کلید مخفی آن درون فایل `final_answer.txt` است. کار *سلیب* دو مرحله زیر را دارد:
1. باید در ابتدا کامیت خوب پروژه را از ۲۵۶ کامیت موجود در آن پیدا کند و **روی آن کامیت** تگی با نام `Found` و مسیج `Found` بزند.
2. پس از زدن تگ روی **کامیت خوب** پروژه، باید کلید موجود در آن را کپی کند و به کامیت آخر پروژه بازگردد و درون فایل `final_answer.txt` کیلد را *paste* کند و تغییرات خود را ادد کرده و آنها را کامیت کند. مسیج کامیت اهمیتی ندارد.
*سلیب* اینبار هم برای بار آخر به سراغ شما میآید و از شما میخواهد تا به او در اثبات تواناییهای خود به *باقر* و *سعید* و *مصطفی* کمک کنید.
### نحوه انجام و ارسال
برای این تمرین شما، یک ریپازیتوری ریموت در کوئرا در نظر گرفته شده است که شما باید نسخه نهایی پروژهتان را برای داوری به آن ریپازیتوری ارسال کنید. برای این کار، به صورت زیر عمل کنید.
+ با فشردن دکمه «گیت» در بخش ارسال پاسخ پایین همین صفحه، لینک ریپازیتوری ریموت را بسازید و آن را کپی کنید.
+ در کامپیوترتان این ریپازیتوری را کلون کنید تا نسخه اولیه پروژه دریافت شود.
+ موارد خواسته شده در تمرین را روی پروژه کلونشده انجام دهید. میتوانید هر تعدادی کامیت انجام دهید و تگ بزنید.
<details class="red" open>
<summary>
**ارسال پاسخ**
</summary>
برای ارسال پاسخ از طریق سایت، ابتدا باید فایلها و تغیرات درون ریپازیتوری خود *push* کنید. شما باید تمامی کامیتها و تگهایتان را برای سیستم داوری کوئرا ارسال کنید. برای اینکار از دستورات زیر استفاده کنید:
```bash
git push -u --all -f
git push origin --tags -f
```
سپس به [این آدرس](https://quera.ir/qgit/submit/?problem_id=126012) برای تست شدن و نمره گرفتن پاسختان بروید. پس از آن پروژه شما با موفقیت برای داوری ارسال شده و میتوانید نمرهتان را در صفحه <همه ارسالها> موجود در منوی سمت راست همین صفحه مشاهده کنید.
</details>
+ در صورتی که با ارسال پاسخ، نمره کامل را دریافت نکردید میتوانید از دکمه ریست بالای پروژه ارسال پاسختان استفاده کنید. پس از فشردن دکمه و تایید برای ریست، ریپازیتوری شما ریست میشود و **باید دوباره پروژه اولیهتان را کلون کنید.**
<details class="yellow">
<summary>
**محل دکمه ریست**
</summary>
![](https://quera.ir/qbox/view/JiJ3QtQYhL/reset.png)
</details>