در این مسئله، سلیب میخواهد بازیای تعریف کند تا از تنهایی ابدی خود نجات یابد و کمی سرگرم شود. این بار میخواهد تا یک برنامه تعاملی بنویسد تا عددی که کد دیگر او انتخاب کرده را پیدا کند :). بازی به این صورت است که سلیب میخواهد تابع GuessMyNumberرا در فایل main.go پیادهسازی کند. امضای این تابع به شکل زیر است:
func GuessMyNumber(game Game) string {
...
}
این تابع یک شی از نوع Game را دریافت میکند. هدف این تابع پیدا کردن عددی است که بازی انتخاب کرده و در داخل Game ذخیره شده است. اما پیدا کردن به شکل مستقیم امکان ندارد و باید حتما بازی کنیم! در واقع ما فقط به یک تابع دسترسی داریم که حدسهای خود را به آن میدهیم و حدسمان را بررسی میکند و به ما راهنمایی میکند که به جواب اصلی نزدیکتر شویم.
در نهایت تابع GuessMyNumber پس از اینکه حدسهای مختلفی میزند و نهایتا پاسخ را پیدا میکند، پاسخ خود را با یک پیام به شکل رشته باز میگرداند:
Your Number was <NUMBER>
برای مثال اگر عدد بازی برابر با 269باشد، این تابع پس از فهمیدن عدد باید عبارت زیر را برگرداند.
Your Number was 269
جرئیات Game
در فایل utils.go، اینترفیس Game آمده است که در اینجا نیز میتوانیم آن را ببینیم:
package main
type Game interface {
CheckNumber(n int) string
}
تابع CheckNumber عددی که به عنوان حدس میگیرد را بررسی میکند و ۳ حالت مختلف را برمیگرداند:
- اگر عدد ورودی تابع یا همان
nاز عدد مورد نظر بازی کمتر باشد، عبارتMy Number is Greaterرا برمیگرداند. - اگر عدد ورودی تابع یا همان
nاز عدد مورد نظر بازی بیشتر باشد، عبارتMy Number is Lowerرا برمیگرداند. - اگر عدد ورودی تابع یا همان
nدقیقا برابر با عدد مورد نظر بازی باشد، عبارتCORRECTرا برمیگرداند.
نمرهدهی
از آنجا که اجرای تابع CheckNumber برای سلیب هزینه دارد (و شاید هم به دنبال پیچاندن و سختتر کردن مسئله است!) سلیب مسئله را در ۴ بخش تعریف کرده است:
| مسئله | نمره |
|---|---|
| با پرسیدن حداکثر ۳۶۰ پرسش به عدد برسد | ۲۵ |
| با پرسیدن حداکثر ۱۸۰ پرسش به عدد برسد | ۲۵ |
| با پرسیدن حداکثر ۶۰ پرسش به عدد برسد | ۲۵ |
| با پرسیدن حداکثر ۱۰ پرسش به عدد برسد | ۲۵ |
هرچه الگوریتم شما برای یافتن عدد بهتر باشد، نمره بیشتری در این مسئله دریافت میکنید :) پس به دنبال راهحلهای خلاقانه باشید.
جزئیات پروژه
پروژهی اولیه را از این لینک دانلود کنید. ساختار فایلهای پروژه بهصورت زیر است:
.
├── 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 را آپلود کنید.
ارسال پاسخ برای این سؤال