""" VBE2022 U1 sprendė Kauno 22-os vm abiturientas
KTU programų inžinerijos dėst. Eimutis Karčiauskas
Duomenų pvz.: 8
2 Atsilenkimai Rytas 10 Prisitraukimai Rytas 8
3 Atsispaudimai Diena 8 Tempimas Vakaras 8 Atsilenkimai Vakaras 9
...
Naudojamos duomenų struktūros ir žymėjimai:
pratimai -> dictionary, kur key=vardas, value= sąrašų pora
sk -> skaitliukai dienos dalių, o sk[3] sumuoja pratimo minutes
dnr -> dienos numeris pradiniuose duomenyse, msk -> minučių skaičius
d_sąr -> dienų sąrašas, kai buvo vykdimas pratimas, pradžioje []
Tada len(d_sąr) rodo kiek kartų buvo vykdomas pratimas,
o set(d_sąr) nurodo skirtingų dienų sąrašą
"""
d_dalys = ["Rytas", "Diena", "Vakaras"]
def skaityti(failo_vardas):
with open(failo_vardas) as f:
pratimai = dict()
for dnr in range(int(f.readline())):
_, *d_pratimai = f.readline().split()
for i in range(0, len(d_pratimai), 3): # per d_pratimus
vardas, dm, msk = d_pratimai[i:i+3] # einame trejetais
sk, d_sąr = pratimai.get(vardas, ([0, 0, 0, 0], []))
sk[d_dalys.index(dm)] += 1 # padidiname d_dalių sk.
sk[3] += int(msk) # sumuojamos pratimo minutės
d_sąr.append(dnr)
pratimai[vardas] = (sk, d_sąr)
return pratimai
def pratimų_vardai(pratimai): # funkcija kurios prašo sąlyga
vardai = list(pratimai.keys())
print(vardai)
def spausdinti(rezultatai, failo_vardas):
pr_sąr = list(pratimai.items())
pr_sąr.sort()
with open(failo_vardas, "w") as f:
for vardas, (sk, d_sąr) in pr_sąr:
print(vardas, len(set(d_sąr)), sk[3], file=f)
for i in range(3):
if sk[i] > 0:
print(f"{d_dalys[i]:7} {sk[i]}", file=f)
"""main dalis - kviečiame funkcijas"""
pratimai = skaityti("U2.txt")
spausdinti(pratimai, "U2rez.txt")
pratimų_vardai(pratimai) # reikalaujamos funkcijos rezultatai
8
2 Atsilenkimai Rytas 10 Prisitraukimai Rytas 8
3 Atsispaudimai Diena 8 Tempimas Vakaras 8 Atsilenkimai Vakaras 9
1 Svarmenys Vakaras 11
3 Svarmenys Diena 10 Svarmenys Diena 12 Atsilenkimai Diena 15
2 Atsilenkimai Vakaras 22 Svarmenys Vakaras 10
3 Svarmenys Diena 15 Atsispaudimai Diena 15 Atsispaudimai Diena 5
2 Svarmenys Rytas 23 Svarmenys Vakaras 13
3 Atsispaudimai Rytas 10 Atsispaudimai Diena 12 Tempimas Vakaras 10