Добавление Python преобразования XLSX в CSV к коду на сайте К.Ю.Полякова (ege22.doc) для #22 КЕГЭ 2023
Предполагается, что Openpyxl устанавливается через pip в конкретную виртуальную среду Python.
Можно установить как пакет на Ubuntu 22.04.1/20.04.5
$ sudo apt install python3-openpyxl
Пример №22 КЕГЭ 2023
В файле 22_6.xlsx содержится информация о совокупности N вычислительных процессов, которые могут выполняться параллельно или последовательно. Будем говорить, что процесс B зависит от процесса A, если для выполнения процесса B необходимы результаты выполнения процесса A. В этом случае процессы могут выполняться только последовательно.
Информация о процессах представлена в файле в виде таблицы. В первой строке таблицы указан идентификатор процесса (ID), во второй строке таблицы — время его выполнения в миллисекундах, в третьей строке перечислены с разделителем «;» ID процессов, от которых зависит данный процесс. Если процесс является независимым, то в таблице указано значение 0.
Определите минимальное время, через которое завершится выполнение всей совокупности процессов, при условии, что все независимые друг от друга процессы могут выполняться параллельно.
Типовой пример организации данных в файле:
(.env)boris@UbuntuLTS:~/TEST22/V12$ cat kpcodeXls.py
# Update started
import openpyxl
import csv
# input excel file path
inputExcel = '22_6.xlsx'
newWorkbook = openpyxl.load_workbook(inputExcel)
# getting the active workbook sheet(Bydefault-->Sheet1)
worksheet = newWorkbook.active
# Opening a output csv file in write mode
F = open("result.csv", 'w')
OutCsv = csv.writer(F,delimiter=";")
for eachrow in worksheet.rows:
OutCsv.writerow([cell.value for cell in eachrow])
F.close()
# update done
# Код ниже из ege22.pdf сайт К.Ю.Полякова
from csv import reader
with open( "result.csv", encoding="utf-8" ) as F:
rdr = reader( F, delimiter=';', quotechar='"' )
next( rdr ) # читаем заголовки и пропускаем их
data = {}
finalTime = {}
for s in rdr:
id, t = int(s[0]), int(s[1])
dependsOn = list( map( int, s[2].split(';') ) )
if dependsOn == [0]:
finalTime[id] = t # известно время окончания
else:
data[id] = ( t, dependsOn ) # неизвестно время окончания
while data:
ids = list(data.keys())
for id in ids:
t, dependsOn = data[id]
if all( (x in finalTime) for x in dependsOn ):
startId = max( finalTime[x] for x in dependsOn )
finalTime[id] = startId + t
del data[id]
print( "Ответ:", max(finalTime.values()) )