در این مسئله، سلیب میخواهد بازیای تعریف کند تا از تنهایی ابدی خود نجات یابد و کمی سرگرم شود. این بار میخواهد تا یک برنامه تعاملی بنویسد تا عددی که کد دیگر او انتخاب کرده را پیدا کند :). بازی به این صورت است که سلیب میخواهد تابع 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
را آپلود کنید.
ارسال پاسخ برای این سؤال