سلام دوست من😃👋

به مسابقه ‌Back-End بله‌ کمپ ۶ خوش آمدید!

مسابقه به مدت ۳ ساعت ادامه خواهد داشت و در مجموع شامل ۳ سوال است.

سوالات به گونه‌ای تنظیم شده‌اند که با توجه به دانشی که دارید بتوانید بخشی از نمرۀ سوال را بگیرید. به عنوان مثال اگر نتوانید سوال ۲ را به طور کامل حل کنید، این امکان وجود دارد که بتوانید بخشی از سوال ۲ را حل کنید؛ بنابراین حتما به تمام سوالات مراجعه کنید.

رتبه‌بندی بر اساس مجموع امتیازاتی که از سوالات کسب می‌کنید صورت می‌گیرد؛ همچنین در صورتی که امتیاز دو نفر یکسان شود، کسی که سوالات را در مدت‌زمان کمتری حل کرده باشد، رتبۀ بهتری کسب می‌کند.

لینک‌های مفید برای شرکت در مسابقه:

موفق باشید 😉✌

بازی حدس عدد


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

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

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

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

Your Number was <NUMBER>
Plain text

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

Your Number was 269
Plain text

جرئیات Game🔗

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

extensionFromNameutils.go
package main

type Game interface {
    CheckNumber(n int) string
}
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 را آپلود کنید.

ارسال پاسخ برای این سؤال
در حال حاضر شما دسترسی ندارید.