Loading...
MiroVatov avatar MiroVatov 1 Точки

Python fundamentals - Dictionaries - More Exercises - 1. Rankings

Проблемче със задачата. Дава ми 60/100 , но имам проблем с намирането на contest-a ,в който вече е участвал юзъра.

Не открива, че юзъра вече е участвал в съответния конкурс и винаги добавя всеки конкурс към конкусрсите, в които е участвал. ако махна [0] след username ми търси само по 1-ви конкурс. Пробвах с лист слаисинг, после с нестед комрехеншън и нищо.

Някой да ми покаже как да го оправя за 100 точки. Долу е условието и джъдж..

https://judge.softuni.bg/Contests/Practice/Index/1738#0

https://pastebin.com/SMdTg91S

 

Тагове:
0
Python Fundamentals
valerielashvili avatar valerielashvili 40 Точки

Благодаря и аз за решенията, успях да си открия грешка по време на присвояването на максималната стойност. След известно време прекарано пред монитора за решаването на задачата и оплакванията на семейството заради това кодът се слива в едно. laugh

Нека си позволя и аз да предложа решението на тази задача с функции:

from typing import Tuple


def add_contest(contest: str, secret: str, contests: dict) -> dict:
    """Add contest and secret to the 'contests' dict."""
    contests[contest] = secret
    return contests


def add_user(contest: str, secret: str, name: str, score: str, contests: dict, ranking: dict) -> dict:
    """Add user to the final ranking."""
    score = int(score)
    if validate_contest(contest, secret, contests):
        if name not in ranking.keys():
            ranking[name] = {contest: score}
        else:
            if contest in ranking[name].keys():
                if ranking[name][contest] < score:
                    ranking[name][contest] = score
            else:
                ranking[name][contest] = score
    return ranking


def validate_contest(contest: str, secret: str, contests: dict) -> bool:
    """Check if a contest is valid and a password is correct."""
    return contest in contests.keys() and secret == contests[contest]


def find_best_candidate(ranking: dict) -> Tuple[str, int]:
    """Find the best candidate with max scores."""
    name, best_score = "", 0
    for user, major in ranking.items():
        current_total = 0
        for score in major.values():
            current_total += score
        if current_total > best_score:
            best_score = current_total
            name = user
    return name, best_score


def format_ranking(best_user: str, max_score: int, ranking: dict) -> str:
    """Format user ranking."""
    result = f"Best candidate is {best_user} with total {max_score} points.\nRanking:\n"
    for user, contest in ranking.items():
        result += f"{user}\n"
        for major, score in contest.items():
            result += f"#  {major} -> {score}\n"
    return result


def sort_ranking(ranking: dict) -> dict:
    """Sort user ranking by name and score in descending order."""
    sorted_name_score = dict(sorted(ranking.items()))
    for user, major in sorted_name_score.items():
        sorted_by_score = dict(sorted(major.items(), key=lambda item: -item[1]))
        sorted_name_score[user] = sorted_by_score
    return sorted_name_score


contest_data = {}
ranking_results = {}

while (line := input()) != 'end of contests':
    contest_name, password = line.split(':')
    contest_data = add_contest(contest_name, password, contest_data)

while (line := input()) != 'end of submissions':
    contest_name, password, username, points = line.split('=>')
    ranking_results = add_user(contest_name, password, username, points, contest_data, ranking_results)


best_candidate, total_points = find_best_candidate(ranking_results)
output = format_ranking(best_candidate, total_points, sort_ranking(ranking_results))
print(output)

 

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.