روز
۹۰۱۲۳۴۵۶۷۸۹۰۹۰۱۲۳۴۵۶۷۸۹۰
روز
ساعت
۹۰۱۲۳۴۵۶۷۸۹۰۹۰۱۲۳۴۵۶۷۸۹۰
ساعت
دقیقه
۹۰۱۲۳۴۵۶۷۸۹۰۹۰۱۲۳۴۵۶۷۸۹۰
دقیقه
ثانیه
۹۰۱۲۳۴۵۶۷۸۹۰۹۰۱۲۳۴۵۶۷۸۹۰
ثانیه

در این مسئله، سلیب می‌خواهد بازی‌ای تعریف کند تا از تنهایی ابدی خود نجات یابد و کمی سرگرم شود. این بار می‌خواهد تا یک برنامه تعاملی بنویسد تا عددی که کد دیگر او انتخاب کرده را پیدا کند :‌). بازی به این صورت است که سلیب می‌خواهد تابع GuessMyNumberرا در فایل main.go پیاده‌سازی کند. امضای این تابع به شکل زیر است:

func GuessMyNumber(game Game) string {
	...
}
Go
main.go

این تابع یک شی از نوع Game را دریافت می‌کند. هدف این تابع پیدا کردن عددی است که بازی انتخاب کرده و در داخل Game ذخیره شده است. اما پیدا کردن به شکل مستقیم امکان ندارد و باید حتما بازی کنیم! در واقع ما فقط به یک تابع دسترسی داریم که حدس‌های خود را به آن می‌دهیم و حدسمان را بررسی می‌کند و به ما راهنمایی می‌کند که به جواب اصلی نزدیک‌تر شویم.

در نهایت تابع GuessMyNumber پس از اینکه حدس‌های مختلفی می‌زند و نهایتا پاسخ را پیدا می‌کند، پاسخ خود را با یک پیام به شکل رشته باز می‌گرداند:

Your Number was <NUMBER>
Plain text

برای مثال اگر عدد بازی برابر با 269باشد، این تابع پس از فهمیدن عدد باید عبارت زیر را برگرداند.

Your Number was 269
Plain text

جرئیات Game

در فایل utils.go، اینترفیس Game آمده است که در اینجا نیز می‌توانیم آن را ببینیم:

package main

type Game interface {
	CheckNumber(n int) string
}
Go
utils.go

تابع 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
Plain text

فایل utils.go شامل اینترفیس Game است. فایل main_sample_test.go نیز شامل یک پیاده‌سازی نمونه از Game است که برای تست‌های اولیه‌ی کد خود می‌توانید از آن استفاده کنید. فایل main.go نیز شامل تابعی‌ است که شما باید پیاده‌سازی کنید.

توجه: در این سؤال تنها مجاز به استفاده از کتاب‌خانه‌های bufio و fmt و math/rand و os و strings هستید.

محدوده‌ی عددی که باید حدس بزنید بین ۱ تا ۳۶۰ است

آن‌چه باید آپلود کنید

پس از پیاده‌سازی تابع GuessMyNumber، فایل main.go را آپلود کنید.


ارسال پاسخ برای این سؤال
فایلی انتخاب نشده است.