diff --git a/README.md b/README.md index e3ac9ef..0068476 100644 --- a/README.md +++ b/README.md @@ -49,7 +49,19 @@ Stakeholder 3 ``` ## Автор решения - +Лобач Ольга Олеговна ## Описание реализации - +Создаем словарь d для обозначения лучших стейкхолдеров. +Считываем из файлов матрицу построчно. +Считываем данные из файлов в списки matrix_interest, matrix_influence. +Длина первой строки - количество стейкхолдеров. +Далее в цикле идем по матрице интересов (matrix_interest), находим сумму строки для каждого стйкхолдера - это его интерес. Затем +сравниваем этот интерес с числом (n/2), где n - число стейкхолдеров, таким образом, находим тех стейкхолдеров, которые будут расположены +в верхней половине нашего конечного графика, их мы в словаре d отмечаем флагом True. +Аналогично идем в цикле по матрице влияния (matrix_influence), отличие лишь в том, что мы больше не отмечаем флагами лучших стейкхолдеров, +а удаляем из словаря тех, которые не удовлетворяют условию - влияние > (n / 2) +Таким образом, оставшиеся в словаре стейкхолдеры - лучшие, их ключи - их номера. +Их мы и выводим в файл result по порядку. ## Инструкция по сборке и запуску решения +Файлы influence.txt, interest.txt должны располагаться в одной директории с файлом program.py. Запускаем файл program.py. +В файле result.txt появится ответ. \ No newline at end of file diff --git a/program.py b/program.py new file mode 100644 index 0000000..567f38a --- /dev/null +++ b/program.py @@ -0,0 +1,44 @@ +d = {} # словарь для результата по каждому стейкхолдеру +# Чтение и обработка файла interests +with open("interest.txt", encoding=" UTF-8") as file_in: + lines = file_in.readline().split(" | ") + lines[-1] = lines[-1].rstrip() + n = len(lines) + matrix_interest = [x.rstrip() for x in file_in.readlines()] # матрица интересов +# Чтение и обработка файла influence +with open("influence.txt", encoding=" UTF-8") as file_in: + lines = file_in.readline().split(" | ") + lines[-1] = lines[-1].rstrip() + if n != len(lines): # если число стейкхолдеров в обехи матрицах не равны -> ошибка ввода + raise ValueError("Ошибка ввода") + matrix_influence = [x.rstrip() for x in file_in.readlines()] # матрица влияния +for i in range(len(matrix_interest)): + summary = 0 + string = matrix_interest[i].split() + for s in string: + if s == "_": + continue + s = float(s) + summary += s + if summary > n / 2: # если сумма входит во 2 половину графика -> в словаре по ключу с номером появляется значение True + d[f"{i + 1}"] = True +for i in range(len(matrix_influence)): + summary = 0 + string = matrix_influence[i].split() + for s in string: + if s == "_": + continue + s = float(s) + summary += s + if summary <= n/2: + if f"{i + 1}" in d: + del d[f"{i + 1}"] +# Запись результата +with open("result.txt", "w") as f: + for k, v in d.items(): + i = 0 + if i == len(d) - 1: + f.write(f"Stakeholder {k}") + else: + f.write(f"Stakeholder {k}\n") + i += 1