Egy fanatikus kosárlabda-szurkoló előre szeretné megvenni a belépőjegyeket a bajnokság februártól májusig terjedő időszakának bizonyos mérkőzéseire. Kedvenc csapata a Voros_Rokak, de szívesen nézi a Computerbonto és a Bohocok meccseit is. Rendelkezésünkre áll a naptar.txt állomány, amely a mérkőzések adatait és a szurkolónak a belépők megvásárlására tervezett maximális pénzkeretét tartalmazza.
Az állomány első sorában a naptárban szereplő mérkőzések száma N (1≤N≤100) és a jegyvásárlásra szánt maximális pénzkeret P (2000≤P≤50000) található. Az ezt követő N sor az egyes mérkőzések négy adatát tartalmazza: a hazai csapat neve, az ellenfél csapatának neve, a nap sorszáma az éven belül és a jegyár. A mérkőzések egy napon belül sem kezdődnek egyszerre, a szervezők biztosítják, hogy elvileg mindegyik megtekinthető legyen.
Készítsünk programot, amely megoldja az alábbi feladatokat, amelyekkel a szurkoló jegyválasztását segítjük. A képernyőre írást igénylő részfeladatok eredményének megjelenítése előtt írjuk a képernyőre a feladat sorszámát (például 4. feladat:). A beolvasás előtt a várt tartalomra vonatkozó üzenetet jelenítsünk meg.
Feladatok:
Olvassuk be a naptar.txt állomány adatait és a következő feladatokat ezek alapján oldjuk meg.
Írjuk ki a képernyőre, hogy a vizsgált időszakban a Voros_Rokak csapat hány mérkőzést játszik, és hogy mennyibe kerülne, ha a rajongó minden mérkőzésükre venne jegyet.
Határozzuk meg, hogy a Voros_Rokak melyik nap játssza először és utoljára otthon a mérkőzését.
Adjuk meg az adatok alapján, hogy mikor lesz utoljára olyan meccs, amikor a három kedvenc csapatból kettő egymás ellen mérkőzik.
Fanatikus szurkoló barátunk a megvásárlandó jegyek kiválasztásához a következő módszert alakította ki, amíg a pénze elegendő:
Időrendben megveszi a Voros_Rokak minden mérkőzésének jegyét.
Ár szerint növekvő sorrendbe állítja a Computerbonto és a Bohocok otthoni mérkőzéseit és ezeket veszi meg sorrendben, amíg a pénzéből futja.
Adjuk meg szóközzel elválasztva, egy sorban, azon napok sorszámát növekvően rendezve, amelyekre jegyet fog venni.
Írjuk ki csapatonként, hogy a három kedvenc csapatát hány mérkőzésen fogja látni.
# 1. feladat
with open('naptar.txt') as fajl: forras = fajl.read().splitlines()
keret = int(forras[0].split(' ')[1])
adatok = [forras[index1].split(' ') for index1 in range(1,len(forras))]
# a hazai csapat neve, az ellenfél csapatának neve, a nap sorszáma, jegyár
for adat in adatok: adat[2]=int(adat[2]) adat[3]=int(adat[3])
# 2. feladat
print('2. feladat')
arak = [int(adat[3]) for adat in adatok if adat[0]=='Voros_Rokak' or adat[1]=='Voros_Rokak']
print('A Voros_Rokak',len(arak),'mérkőzést játszik, a jegyárak összege',sum(arak),'Ft')
# 3. feladat
print('\n3. feladat')
napok = [adat[2] for adat in adatok if adat[0]=='Voros_Rokak']
napok.sort()
print('Először: '+str(napok[0])+'. napon, utoljára: '+str(napok[-1])+'. napon')
# 4. feladat
print('\n4. feladat')
kedvencek = ['Computerbontok','Bohocok','Voros_Rokak']
napok = [adat[2] for adat in adatok if adat[0] in kedvencek and adat[1] in kedvencek]
napok.sort()
print('Utolsó mérkőzés napja:',napok[-1])
# 5. feladat
print('\n5. feladat')
csoport1 = [adat for adat in adatok if adat[0]=='Voros_Rokak' or adat[1]=='Voros_Rokak']
keret -= sum(arak)
csoport2 = [adat for adat in adatok if (adat[0]=='Computerbontok' or adat[0]=='Bohocok') and adat not in csoport1]
csoport2.sort(key = lambda e:e[3])
index1 = 0
while keret-csoport2[index1][3]>0: keret -= adat[3] csoport1.append(csoport2[index1]) index1 += 1
napok = list({adat[2] for adat in csoport1})
napok.sort()
napok1 = [str(nap) for nap in napok] # a kiíráshoz stringgé kell átalakítani a számokat
print('A következő napokra vesz jegyet:',' '.join(napok1))
# 6. feladat
print('\n6. feladat')
for kedvenc in kedvencek: print(kedvenc+':',len([1 for adat in csoport1 if adat[0]==kedvenc or adat[1]==kedvenc]))