سوالات چالشی هفته ششم لیگ مایکد به همراه پاسخهای مورد انتظار تست کیسها جهت آشنایی بیشتر شرکتکنندگان در لیگ منتشر میگردد.
دریافت
عنوان: پنهان سازی درآمد
حجم: 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 مگابایت
توضیحات: با توضیحات کامل
دیدگاهها
هیچ نظری هنوز ثبت نشده است.