From 0569b55afccf49e92813c152455fe116f636c9b2 Mon Sep 17 00:00:00 2001 From: al771 <58562943+al771@users.noreply.github.com> Date: Sun, 12 May 2024 18:22:13 +0300 Subject: [PATCH 1/2] Update README.md --- README.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/README.md b/README.md index a2bc0aa..b46ec5a 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,20 @@ CodeKiller777 Ручной ввод пути к файлу (через консоль, через правку переменной в коде и т.д.) недопустим. Необходимость любых ручных действий с файлами в процессе работы программы будут обнулять решение. ## Автор решения +Шармадини Елена Шалвовна ## Описание реализации +Программа обрабатывает исходный файл для формирования топ-3 сотрудников. Реализована функция find_winners. Для проверки корректноссти исходных строк с информацией о коммитах используются регулярные выражения. Если строка неккоректна, то она игнорируется, а в консоль выводится сообщение о неккоректности конкретной строки. Для обработки данных все логины сотрудников записываются в словарь, где ключ - это логин, а значение - число коммитов. Сформированный топ записывается в файл "result.txt". + ## Инструкция по сборке и запуску решения +1. Убедитесь в том, что у Вас установлен python + ``` + python --version + ``` +2. Скачать файл ``main.py``. +3. Поместить в ту же папку файл ``commits.txt``. +4. Запустить ``main.py`` + ``` + python main.py + ``` From c870c4655c86a7ec563fa212f8c634bc3cd33d98 Mon Sep 17 00:00:00 2001 From: al771 <58562943+al771@users.noreply.github.com> Date: Sun, 12 May 2024 18:25:01 +0300 Subject: [PATCH 2/2] Add files via upload --- commits.txt | 8 ++++++++ main.py | 35 +++++++++++++++++++++++++++++++++++ result.txt | 3 +++ 3 files changed, 46 insertions(+) create mode 100644 commits.txt create mode 100644 main.py create mode 100644 result.txt diff --git a/commits.txt b/commits.txt new file mode 100644 index 0000000..f8a7f85 --- /dev/null +++ b/commits.txt @@ -0,0 +1,8 @@ +BIvanov 25ec001 2024-04-24T13:56:39.492 +BIvanov 25ec001 2024-04-24T13:56:39.492 +BIvanov 25ec001 2024-04-24T13:56:39.492 +BIvanov 25ec001 2024-04-24T13:56:39.492 +BIvanov 25ec001 2024-04-24T13:56:39.492 +CIvanov 25ec001 2024-04-24T13:56:39.492 +AIvanov 25ec001 2024-04-24T13:56:39.492 +AIvanov 25ec001 2024-04-24T13:56:39.492 \ No newline at end of file diff --git a/main.py b/main.py new file mode 100644 index 0000000..3817f9a --- /dev/null +++ b/main.py @@ -0,0 +1,35 @@ +import re + + +def find_winners(commits_file: str, result_file: str, winner_count: int) -> None: + users = {} + + # Шаблон строки - сведений о коммите + sample = re.compile(r'^(([a-zA-Z][a-zA-z0-9_]*)\s[a-z0-9]{7}\s\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(.\d{3})?)$') + + # Считываем данные из файла commits_file + with open(commits_file, 'r') as f: + for line in f: + if sample.match(line): + username: str = line.split()[0] + if username in users.keys(): + users[username] += 1 + else: + users[username] = 1 + else: + print(f"Ошибка в формате строки:{line}строка игнорируется") + + # Находим топ-3 пользователей + top_users = sorted(users, key=users.get, reverse=True)[:winner_count] + + # Записываем топ пользователей в файл + with open(result_file, 'w') as f: + for user in top_users: + f.write(user + '\n') + + print(f'Топ пользователей записан в {result_file}') + + +if __name__ == '__main__': + find_winners('commits.txt', 'result.txt', 3) + diff --git a/result.txt b/result.txt new file mode 100644 index 0000000..302d636 --- /dev/null +++ b/result.txt @@ -0,0 +1,3 @@ +BIvanov +AIvanov +CIvanov