سوالات چالشی هفته ششم لیگ مایکد به همراه پاسخهای مورد انتظار تست کیسها جهت آشنایی بیشتر شرکتکنندگان در لیگ منتشر میگردد.
دریافت
عنوان: پنهان سازی درآمد
حجم: 394 کیلوبایت
توضیحات: سوال چالشی محاسبه میانگین با پنهان سازی درآمد
دریافت
عنوان: رمزگذاری rot13
حجم: 236 کیلوبایت
توضیحات: سوال چالشی رمزگذاری rot13
دریافت
عنوان: صندلی طلایی در آمفی تئاتر
حجم: 338 کیلوبایت
توضیحات: سوال چالشی یافتن صندلی طلایی در آمفی تئاتر با استفاده از زاویه ی محاطی
// حلقهای برای پردازش هر خط ورودی
for (int i = 0; i < lines.Length; i++)
{
string line = lines[i]; // دریافت خط فعلی از آرایه ورودی
string[] part1 = line.Split('$'); // تقسیم رشته ورودی به دو بخش با استفاده از علامت '$'
// ابتدا درامد هارو جدا میکند و سپس تبدیل به نوع عددی میکند و بعدش تبدیل به لیست
int[] Money = part1[0].Split(',').Select(int.Parse).ToArray();
int R = int.Parse(part1[1]); // R قرار دادن عدد تصادفی در متغیر
// مرحله 1: افزودن R به درآمد نفر اول
int sum = R + Money.Sum(); //Sum(): برای جمع بستن تمام اندیس های ارایه درامد
// مرحله 2 و 3: شبیهسازی انتقال مقادیر و بازگشت آن به نفر اول
int fullSum = sum; // در اینجا تغییری ایجاد نمیشود، اما برای فعال بودن منطق برنامه این مرحله را حفظ میکنیم
// مرحله 4: حذف R و محاسبه میانگین
int fullmoney = fullSum - R; // مقدار اولیه را از مجموع کل کم میکنیم
int Average = fullmoney / Money.Length; // محاسبه میانگین درآمدها
// مرحله 5: محاسبه کد تأیید
int verificationCode = fullSum % R; // مقدار کل باقیمانده را بر R تقسیم کرده و باقیمانده را بهعنوان کد تأیید ذخیره میکنیم
// ذخیره نتیجه در خروجی
outputLines[i] = $"{Average}${verificationCode}"; // خروجی شامل میانگین درآمدها و کد تأیید است که با '$' جدا میشوند
}
// متد تبدیل یک حرف به صورت ROT13
static char nex13Char(char c) // تابع تبدیل یک حرف به روش nex13
{
if (c >= 'a' && c <= 'z')// برسی اینکه ایا کاراکتر حرف کوچیک انگلیسی است یا نه
{
// محاسبه جایگاه حرف در الفبا (0 تا 25)
int offset = c - 'a';
// اعمال انتقال ۱۳ موقعیت و چرخش به ابتدای الفبا در صورت نیاز
offset = (offset + 13) % 26;
return (char)('a' + offset);// برگرداندن حرف جدید
}
else if (c >= 'A' && c <= 'Z')// اگر حرف بزرگ باشد
{
int offset = c - 'A';
offset = (offset + 13) % 26;
return (char)('A' + offset);
}
else
{
// اگر حرف نباشد (مثلاً فاصله یا نماد) بدون تغییر برگردان
return c;
}
}
// متد تبدیل کل رشته به صورت nex13 or Rot13
static string Rot13String(string input)
{
//StringBuilder به ما اجازه میدهد بدون ایجاد نسخههای جدید، رشتهی خود را در حافظه تغییر دهیم، که عملکرد برنامه را بهینهتر میکند.
StringBuilder sb = new StringBuilder();
//حلقه foreach برای پردازش هر کاراکتر
//هر کاراکتر ورودی در حلقه foreach پردازش شده و به رشته جدید اضافه میشود.
foreach (char c in input) //این حلقه، تمامی کاراکترهای موجود در رشتهی input را یک به یک پردازش میکند.
{ //در هر تکرار، یک کاراکتر (char c) از رشته ورودی خوانده شده و درون متغیر c ذخیره میشود.
sb.Append(nex13Char(c)); //این تابع قرار است هر کاراکتر را پردازش کرده و در صورت نیاز آن را طبق الگوریتم nex13 تبدیل کند.
}
return sb.ToString(); //در نهایت، تمامی کاراکترهای پردازششده که در StringBuilder ذخیره شدهاند، به یک رشتهی معمولی (string) تبدیل میشوند.
//سپس این رشته به عنوان خروجی تابع بازگردانده میشود.
}
// پردازش هر خط از ورودی
for (int i = 0; i < inputLines.Length; i++)
{
// حذف فضای اضافی از ابتدا و انتهای خط
string line = inputLines[i].Trim();
// اگر خط خالی بود، خروجی هم خالی میشود
if (string.IsNullOrEmpty(line))
{
outputLines[i] = "";
continue;
}
// تقسیم خط به اجزای عددی بر اساس فضای خالی (انتظار: ۴ عدد)
string[] parts = line.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
if (parts.Length != 4)
{
outputLines[i] = "خطای ورودی";
continue;
}
// تبدیل رشتهها به اعداد صحیح؛ در صورت عدم موفقیت، خطا ثبت میشود
if (!int.TryParse(parts[0], out int L) ||
!int.TryParse(parts[1], out int Xsys) ||
!int.TryParse(parts[2], out int Ysys) ||
!int.TryParse(parts[3], out int N))
{
outputLines[i] = "خطای ورودی";
continue;
}
// محاسبه مربع فاصله هدف (targetSquared)
// به این صورت: (Xsys)^2 + (Ysys)^2
int targetSquared = Xsys * Xsys + Ysys * Ysys;
// ایجاد لیست برای ذخیره مختصات صندلیهای طلایی
List<(int x, int y)> goldenSeats = new List<(int, int)>();
// بررسی صندلیها: ردیفها از y = -N تا y = -1
for (int y = -N; y <= -1; y++)
{
// ستونها از x = 0 تا x = L
for (int x = 0; x <= L; x++)
{
// محاسبه اختلاف افقی و عمودی نسبت به نقطهی خاص
int dx = x - Xsys;
int dy = y - Ysys;
// محاسبه مربع فاصله: (dx)^2 + (dy)^2
int dSquared = dx * dx + dy * dy;
// اگر مربع فاصله برابر با targetSquared شود، صندلی طلایی است
if (dSquared == targetSquared)
{
goldenSeats.Add((x, y));
}
}
}
// اگر هیچ صندلی طلایی پیدا نشد، مقدار خروجی 404 خواهد بود
if (goldenSeats.Count == 0)
{
outputLines[i] = "404";
}
else
{
// مرتبسازی صندلیهای طلایی:
// ابتدا بر اساس y به صورت نزولی (یعنی ردیف نزدیک به -1 ابتدا)
// سپس بر اساس x به صورت صعودی (از چپ به راست)
var sortedSeats = goldenSeats
.OrderBy(seat => seat.y * -1) // مرتبسازی نزولی بر اساس y
.ThenBy(seat => seat.x) // مرتبسازی صعودی بر اساس x
.ToList();
// ساخت رشته خروجی: هر صندلی با فرمت (x,y) و جدا شده با کاما
string output = string.Join(",", sortedSeats.Select(seat => $"({seat.x},{seat.y})"));
outputLines[i] = output;
}
}
دریافت
عنوان: پاسخ تیم برنده به سوالات هفته ششم
حجم: 1.75 مگابایت
توضیحات: با توضیحات کامل
دیدگاهها
هیچ نظری هنوز ثبت نشده است.