حالت آفلاین — محتوا از حافظهٔ کش نمایش داده می‌شود
آموزش الگوریتم و حل مسئله با پایتون؛ تمرین عملی

رتبه‌بندی مسابقه پایتون؛ تعداد حل نزولی

پروژه رتبه‌بندی مسابقه با پایتون؛ جدول نتیجه بدون تغییر ورودی · 0٪

✍️ اولین قانون جدول مسابقه ساده است: کسی که مسئله بیشتری حل کرده جلوتر می‌آید. جریمه در این گام عمداً وارد تصمیم نمی‌شود؛ اول باید مطمئن شویم اولویت اصلی را درست اجرا کرده‌ایم. حتی جریمه خیلی کم نباید کسی با تعداد حل کمتر را از شرکت‌کننده پرحل‌تر جلو بیندازد.

برای مثال، نازنین با چهار حل و جریمه دویست از کیان با سه حل و جریمه بیست جلوتر است. اگر دو نفر چهار حل داشته باشند، فعلاً همان ترتیب ورودی را نگه می‌داریم. در گام بعد قانون جریمه را اضافه می‌کنیم؛ این تفکیک کمک می‌کند علت یک جابه‌جایی اشتباه را دقیق‌تر پیدا کنیم.

تابع را با یک مرتب‌سازی تازه کامل کن و فقط نام‌ها را خروجی بده. فهرست خالی نتیجه خالی و تک‌عضوی نتیجه یک نام دارد. تعداد حل صفر هم کمترین مقدار معتبر است، نه نشانه داده خراب. خطای رایج، مرتب‌سازی صعودی یا استفاده از penalty به عنوان کلید اصلی است. برای بررسی شخصی، دو رکورد بساز که تعداد حل بهتر ولی جریمه بدتر دارند؛ این آزمون نشان می‌دهد معیار اصلی واقعاً درست در اولویت قرار گرفته است.

تابع آماده course_check فقط برای ارزیابی است: تابع اصلی را صدا می‌زند و حفظ ورودی را بررسی می‌کند. آن را تغییر نده؛ پاسخ تو همان تابع خواسته‌شده است.

فعالیت شما

تابع rank_by_solved(players) رکوردهای name رشته و solved/penalty صحیح نامنفی می‌گیرد و نام‌ها را تنها با solved نزولی برمی‌گرداند؛ penalty در این گام اثری ندارد و solved مساوی ترتیب ورودی را حفظ کند. خالی []، تک‌عضوی همان نام و solved=0 معتبر. A با 4 حل و جریمه 200 از B با 3 حل و جریمه 20 جلوتر است. ورودی و رکوردها تغییر نکنند. تابع آماده course_check فقط برای ارزیابی است: تابع اصلی را صدا می‌زند و حفظ ورودی را بررسی می‌کند. آن را تغییر نده؛ پاسخ تو همان تابع خواسته‌شده است.

مطالعهٔ این گام برای همه آزاد است

برای پاسخ‌دادن، بررسی پاسخ، ثبت پیشرفت و استفاده از دستیار باید شرایط شرکت در فعالیت‌ها را داشته باشید.

برای انجام فعالیت وارد شوید

برای انجام فعالیت‌ها ابتدا این دوره‌های پیش‌نیاز را تکمیل کنید:

کد اولیهٔ فعالیت

def rank_by_solved(players):
    # TODO: produce a new ordering by solved count only
    ordered = []
    return [player['name'] for player in ordered]

# این تابع آماده فقط برای ارزیابی است؛ آن را تغییر نده.
def course_check(*args):
    from copy import deepcopy
    before = deepcopy(args)
    result = rank_by_solved(*args)
    if args != before:
        raise ValueError('ورودی نباید تغییر کند.')
    return result