From c137e6c913308cffe66235c7bd848bcee2e470bc Mon Sep 17 00:00:00 2001 From: dustov2003 Date: Sun, 19 May 2024 03:51:34 +0300 Subject: [PATCH 1/2] . --- README.md | 24 ++++++++++++++++++++++++ config.json | 5 +++++ main.py | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ result.txt | 2 +- 4 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 config.json create mode 100644 main.py diff --git a/README.md b/README.md index 55fc8e7..b0e4949 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,31 @@ a30b4d51-11b4-49b2-b356-466e92a66df7 Иванов Иван Иванович 16.0 Примеры входного и выходного файлов приложены к настоящему техническому заданию. ## Автор решения +#### Дустов Сунатулло Хуршедович +#### (Dustov Sunatullo Khurshedovich) ## Описание реализации +#### get_json_config() + +Изначально код из config.json получает данные: +* путь к файлу со списаниями +* путь к файлу в который нужно записать высчитанный дизбаланс +* тот процент дизбаланса, превосходя который, должна быть произведена запись в выходной файл + +#### get_report_data() + +Создаётся словарь в котором ключ это ID работника, а значение это список Фамилии И.О. и суммарного времени списания + +После мы создаём список списков (каждый список в списке будет формата [ является ли дизбаланс положительным ,Фамилия И.О., значение дизбаланса ]), в котором храним данные только тех работников, которые перевыполнили или недовыполнили норму на 10 процентов. + +После идёт этап сортировки, для удобства формат списка и был таким, каким был озвучен ранее. Обычный метод sort() для списков должен всё правильно отсортировать. + +#### write_disbalance() +Полученный список списков записываем в файл в нужном формате ## Инструкция по сборке и запуску решения +Установите python ( https://www.python.org ). +После в терминале в директории school2024-test-task6 наберите следующую команду: +``` +python main.py +``` diff --git a/config.json b/config.json new file mode 100644 index 0000000..1c59342 --- /dev/null +++ b/config.json @@ -0,0 +1,5 @@ +{ + "input" : "report.txt", + "output" : "result.txt", + "percent_of_normal_worktime" : 10 +} \ No newline at end of file diff --git a/main.py b/main.py new file mode 100644 index 0000000..5878857 --- /dev/null +++ b/main.py @@ -0,0 +1,48 @@ +import json + + +def get_json_config(path='config.json'): + with open(path, 'r') as config_file: + config = json.load(config_file) + in_path = config['input'] + out_path = config['output'] + wk_part = config['percent_of_normal_worktime'] + return in_path, out_path, wk_part + + +def get_report_data(path): + with open(path, 'r', encoding='utf-8') as report: + work_time = int(report.readline()) + data = {} + line = report.readline() + while line: + line = line.split() + if line[0] not in data: + data[line[0]] = [line[1] + ' ' + line[2][0] + '.' + line[3][0] + '.', 0] + data[line[0]][1] += float(line[-1]) + line = report.readline() + disbalance = [] + for id in data: + diff = abs(data[id][-1] - work_time) + if diff >= work_time * work_part / 100: + hours = int(diff) if int(diff) == diff else diff + disbalance.append([work_time < data[id][-1]] + data[id][:1] + [str(hours)]) + disbalance.sort() + return disbalance + + +def write_disbalance(disbalance, path): + with open(path, 'w', encoding='utf-8') as result_file: + for employee in disbalance: + sign = '+' if employee[0] else '-' + result_file.write(employee[1] + ' ' + sign + employee[-1]) + if employee != disbalance[-1]: + result_file.write('\n') + + +if __name__ == '__main__': + input_path, output_path, work_part = get_json_config() + + disbal = get_report_data(input_path) + write_disbalance(disbal,output_path) + print('!!!Программа завершила работу!!!') \ No newline at end of file diff --git a/result.txt b/result.txt index a89365a..161eaaf 100644 --- a/result.txt +++ b/result.txt @@ -1,2 +1,2 @@ Петров А.С. -3 -Журавлева Е.А. +4 +Журавлева Е.А. +4 \ No newline at end of file From 7b61321cc209f2ef10b942ad43b0c8d43ad303f2 Mon Sep 17 00:00:00 2001 From: dustov2003 Date: Sun, 19 May 2024 04:01:07 +0300 Subject: [PATCH 2/2] fixed diff --- main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.py b/main.py index 5878857..1b11a18 100644 --- a/main.py +++ b/main.py @@ -24,7 +24,7 @@ def get_report_data(path): disbalance = [] for id in data: diff = abs(data[id][-1] - work_time) - if diff >= work_time * work_part / 100: + if diff > work_time * work_part / 100: hours = int(diff) if int(diff) == diff else diff disbalance.append([work_time < data[id][-1]] + data[id][:1] + [str(hours)]) disbalance.sort()