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.

1. Olvassuk be a naptar.txt állomány adatait és a következő feladatokat ezek alapján oldjuk meg.

2. Í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.

3. Határozzuk meg, hogy a Voros_Rokak melyik nap játssza először és utoljára otthon a mérkőzését.

4. 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.

5. Adjuk meg szóközzel elválasztva, egy sorban, azon napok sorszámát növekvően rendezve, amelyekre jegyet fog venni.

6. Írjuk ki csapatonként, hogy a három kedvenc csapatát hány mérkőzésen fogja látni.

Letöltés: naptar.txt

 

Minta:

2. feladat
A Voros_Rokak 13 mérkőzést játszik, a jegyárak összege 16680 Ft

3. feladat
Először: 85. napon, utoljára: 155. napon

4. feladat
Utolsó mérkőzés napja: 148

5. feladat
A következő napokra vesz jegyet: 71 85 92 99 106 113 120 127 141 148 155

6. feladat
Computerbontok: 2
Bohocok: 4
Voros_Rokak: 13

 

 

Megoldás

# 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]))

News Reporter