سوالات هفته پنجم لیگ مای‌کد به همراه پاسخ

سوالات هفته پنجم لیگ مای‌کد به همراه پاسخ

سوالات چالشی هفته پنجم لیگ مای‌کد به همراه پاسخ‌های مورد انتظار تست کیس‌ها جهت آشنایی بیشتر شرکت‌کنندگان در لیگ منتشر می‌گردد.

دریافت
عنوان: ضرب روسی
حجم: 304 کیلوبایت
توضیحات: سوال چالشی ضرب روسی با پیروری از دستورالعمل

پاسخ تیم برنده


دریافت
عنوان: سوال بارکد بهبود یافته
حجم: 207 کیلوبایت
توضیحات: سوال چالشی بارکد بهبود یافته با بیت اضافی

پاسخ تیم برنده 


دریافت
عنوان: سوال رمزگشایی نقشه گنج
حجم: 198 کیلوبایت
توضیحات: سوال چالشی رمز گشایی با کلید خاص

پاسخ تیم برنده


تابع اصلی مرتبط با سوال اول

def ancient_multiplication(data):
    #ارور هندلینگ و مطمعن شدن از صحیح بودن داده ها
    try:
        A, B = map(int, data)
    except ValueError:
        return "ERROR"
    #نصف کردن A تا زمانی که از 1 بزرگ تر است و شمارش تعداد لوپ های انجام شده با استپ
    result, steps = 0, 0
    while A > 0:
        if A % 2 == 1:
            result += B
        A //= 2
        B *= 2
        steps += 1
    #خروجی دادن دادن تعداد لوپ و مقدار ریزالت
    return f"{result},{steps}"

تابع اصلی مرتبط با سوال دوم

#تابع رمزگشایی
def decode_barcode(barcode):
    #خالی کردن رشته از فاصله و یا نقطه
    barcode = barcode.replace(" ", "").replace(".", "")
    #چک کردن برای مضرب 4 بودن بارکد
    if len(barcode) % 4 != 0:
        return "ERROR"
    #نقشه باینری برای ایدریت کردن
    digit_map = {
        "000": "0", "001": "1", "010": "2", "011": "3",
        "100": "4", "101": "5", "110": "6", "111": "7"
    }
    #عدد دیکد شده تعریف  شده تا بعدش بهش دیجیت ها اضافه بشه
    decoded_number = ""
    #ایدریت کردن در طول بارکد به صورت چهارتا چهارتا و پیدا کردن تعداد 1 و اضافه کردن دیجیت ها
    for i in range(0, len(barcode), 4):
        group = barcode[i:i+4]
        if group.count("1") % 2 != 0:
            return "ERROR"
        
        digit_bits = group[:3]
        if digit_bits in digit_map:
            decoded_number += digit_map[digit_bits]
        else:
            return "ERROR"
    #اتمام تابع و خروجی دادن جواب
    return int(decoded_number)

تابع اصلی مرتبط با سوال سوم

#تابع اصلی برای دیکریپت کردن
def decrypt_message(x):
    #پیدا کردن شماره عدد در حروف الفبا با اختلاف یونیکد ان نسب به a یا A
    encrypted_text, key = x[0], x[1].lower()
    key_shifts = [ord(k) - ord('a') + 1 for k in key]
    #تعریف کردن پیام رمزگشایی شده برای اضافه کردن حروف در هر ایدریت
    decrypted_text = []
    for i, char in enumerate(encrypted_text):
        if 'A' <= char <= 'Z':  
            shift = key_shifts[i % len(key)]
            new_char = chr(((ord(char) - ord('A') - shift) % 26) + ord('A'))
        elif 'a' <= char <= 'z':  
            shift = key_shifts[i % len(key)]
            new_char = chr(((ord(char) - ord('a') - shift) % 26) + ord('a'))
        else:
            new_char = char  

        decrypted_text.append(new_char)
    #تبدیل لیست رمزگشایی شده به یک استرینگ
    return "".join(decrypted_text)


۰ ۰ ۰ دیدگاه

دیدگاه‌ها

هیچ نظری هنوز ثبت نشده است.
ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی

لیگ دانش‌آموزی ACM - مای‌کُد

این لیگ در طول سالی تحصیلی و از آذر‌ماه تا فروردین‌ماه سال بعد به صورت ترکیبی برخط/حضوری برگزار خواهد شد.

دسته‌بندی
آخرین مطلب
پیوندها
بایگانی