در این مسئله، *سلیب* میخواهد بازیای تعریف کند تا از تنهایی ابدی خود نجات یابد و کمی سرگرم شود. این بار میخواهد تا یک برنامه تعاملی بنویسد تا عددی که کد دیگر او انتخاب کرده را پیدا کند :). بازی به این صورت است که *سلیب* میخواهد تابع `GuessMyNumber`را در فایل `main.go` پیادهسازی کند. امضای این تابع به شکل زیر است:
```go main.go go
func GuessMyNumber(game Game) string {
...
}
```
این تابع یک شی از نوع `Game` را دریافت میکند. هدف این تابع پیدا کردن عددی است که بازی انتخاب کرده و در داخل `Game` ذخیره شده است. اما پیدا کردن به شکل مستقیم امکان ندارد و باید حتما بازی کنیم! در واقع ما فقط به یک تابع دسترسی داریم که حدسهای خود را به آن میدهیم و حدسمان را بررسی میکند و به ما **راهنمایی** میکند که به جواب اصلی نزدیکتر شویم.
در نهایت تابع `GuessMyNumber` پس از اینکه حدسهای مختلفی میزند و نهایتا پاسخ را پیدا میکند، پاسخ خود را با یک پیام به شکل رشته باز میگرداند:
```
Your Number was <mark class="blue" title="عدد پیدا شده"><NUMBER></mark>
```
برای مثال اگر عدد بازی برابر با `269`باشد، این تابع پس از فهمیدن عدد باید عبارت زیر را برگرداند.
```
Your Number was 269
```
# جرئیات Game
در فایل `utils.go`، اینترفیس `Game` آمده است که در اینجا نیز میتوانیم آن را ببینیم:
```go utils.go go
package main
type Game interface {
CheckNumber(n int) string
}
```
تابع `CheckNumber` عددی که به عنوان حدس میگیرد را بررسی میکند و ۳ حالت مختلف را برمیگرداند:
+ اگر عدد ورودی تابع یا همان `n` از عدد مورد نظر بازی کمتر باشد، عبارت `My Number is Greater` را برمیگرداند.
+ اگر عدد ورودی تابع یا همان `n` از عدد مورد نظر بازی بیشتر باشد، عبارت `My Number is Lower` را برمیگرداند.
+ اگر عدد ورودی تابع یا همان `n` دقیقا برابر با عدد مورد نظر بازی باشد، عبارت `CORRECT` را برمیگرداند.
# نمرهدهی
از آنجا که اجرای تابع `CheckNumber` برای *سلیب* هزینه دارد (و شاید هم به دنبال پیچاندن و سختتر کردن مسئله است!) *سلیب* مسئله را در ۴ بخش تعریف کرده است:
| مسئله | نمره |
|---|---|
| با پرسیدن حداکثر ۳۶۰ پرسش به عدد برسد | ۲۵ |
| با پرسیدن حداکثر ۱۸۰ پرسش به عدد برسد | ۲۵ |
| با پرسیدن حداکثر ۶۰ پرسش به عدد برسد | ۲۵ |
| با پرسیدن حداکثر ۱۰ پرسش به عدد برسد | ۲۵ |
هرچه الگوریتم شما برای یافتن عدد بهتر باشد، نمره بیشتری در این مسئله دریافت میکنید :) پس به دنبال راهحلهای خلاقانه باشید.
# جزئیات پروژه
پروژهی اولیه را از [این لینک](/contest/assignments/54145/download_problem_initial_project/183357/) دانلود کنید. ساختار فایلهای پروژه بهصورت زیر است:
```
.
├── go.mod
├── go.sum
├── main.go
├── utils.go
└── main_sample_test.go
```
فایل `utils.go` شامل اینترفیس `Game` است. فایل `main_sample_test.go` نیز شامل یک پیادهسازی نمونه از `Game` است که برای تستهای اولیهی کد خود میتوانید از آن استفاده کنید. فایل `main.go` نیز شامل تابعی است که شما باید پیادهسازی کنید.
**توجه:** در این سؤال تنها مجاز به استفاده از کتابخانههای `bufio` و `fmt` و `math/rand` و `os` و `strings` هستید.
### محدودهی عددی که باید حدس بزنید بین ۱ تا ۳۶۰ است
# آنچه باید آپلود کنید
پس از پیادهسازی تابع `GuessMyNumber`، فایل `main.go` را آپلود کنید.