forgalom=[]     #mátrix (listák listája) az adatok tárolására
#------------------------------------------------------------------------------
# 1. Olvassa be és tárolja el az utasadat.txt fájl tartalmát!
#------------------------------------------------------------------------------
print('1.feladat - adatbeolvasás')

#forgalom=[sor.strip().split() for sor in open('utasadat.txt','r')]

fbe=open('utasadat.txt','r')
for sor in fbe:
    sor=sor.strip().split()
    forgalom.append(sor)
fbe.close()

#------------------------------------------------------------------------------
# 2. Adja meg, hogy hány utas szeretett volna felszállni a buszra!
#------------------------------------------------------------------------------
print('2. feladat')
print(f'A buszra {len(forgalom)} utas akart felszállni.')
print('A buszra %d utas akart felszállni.' %len(forgalom))

#------------------------------------------------------------------------------
# 3.A közlekedési társaság szeretné, ha a járművőn csak az érvényes jeggyel
#   vagy bérlettel rendelkezők utaznának. Ezért a jegyeket és bérleteket a
#   buszvezető a felszálláskor ellenőrzi. (A bérlet még érvényes a lejárat
#   napján.) Adja meg, hogy hány esetben kellett a buszvezetőnek elutasítania
#   az utas felszállását, mert lejárt a bérlete vagy már nem volt jegye!
#------------------------------------------------------------------------------
print('3. feladat')
nem=0
for sor in forgalom:
    if sor[4]=='0':         #jegy, de már felhasználta az összeset
        nem+=1
    if sor[3]!='JGY' and sor[1][0:8]>sor[4]:    #nem jegy, de lejárt a bérlet
        nem+=1
     
print(f'A buszra {nem} utas nem szállhatott fel.')

#------------------------------------------------------------------------------
# 4.Adja meg, hogy melyik megállóban próbált meg felszállni a legtöbb utas!
#   (Több azonos érték esetén a legkisebb sorszámút adja meg!) 
#------------------------------------------------------------------------------
print('4. feladat')

felszall=[0]*30     #30 helyen lehet felszállni és a megaáálók sorszáma:
                    #0,1,...,29 azaz pont indexelhet egy 30 elemű listát!

for sor in forgalom:
    felszall[int(sor[0])]+=1   #a megálló sorszámával indexelt elem növelése
    
print(f'A legtöbb utas ({max(felszall)} fő) a {felszall.index(max(felszall))}. megállóban próbált felszállni.') 

#------------------------------------------------------------------------------
# 5.A közlekedési társaságnak kimutatást kell készítenie, hogy hányszor utaztak
#   valamilyen kedvezménnyel a járművön. Határozza meg, hogy hány kedvezményes
#   és hány ingyenes utazó szállt fel a buszra! (Csak az érvényes bérlettel
#   rendelkező szállhatott fel a buszra!) 
#------------------------------------------------------------------------------
print('5. feladat')

ingyenes=0
kedvezmeny=0
for sor in forgalom:
    if sor[3]!='JGY' and sor[1][0:8]<=sor[4]: #nem jegy, de érvényes a bérlet
        if sor[3]=='NYP' or sor[3]=='RVS' or sor[3]=='GYK':
            ingyenes+=1
        if sor[3]=='TAB' or sor[3]=='NYB':
            kedvezmeny+=1

print(f'Ingyenesen utazók száma: {ingyenes} fő')
print(f'A kedvezményesen utazók száma: {kedvezmeny} fő')

#------------------------------------------------------------------------------
# 6.Készítsen függvényt napokszama néven az alábbi algoritmus alapján. Az
#   algoritmus a paraméterként megadott két dátumhoz (év, hónap, nap) megadja
#   a közöttük eltelt napok számát! (A MOD a maradékos osztást, a DIV az
#   egészrészes osztást jelöli.) Az algoritmust a fuggveny.txt fájlban is
#   megtalálja. A függvényt a következő feladat megoldásához felhasználhatja.
#
#   Függvény napokszama(e1:egész,h1:egész,n1:egész,e2:egész,h2:egész,n2:egész):egész 
#       h1 = (h1 + 9) MOD 12 
#       e1 = e1 - h1 DIV 10 
#       d1 = 365*e1 + e1 DIV 4 - e1 DIV 100 + e1 DIV 400 + (h1*306 + 5) DIV 10 + n1 - 1 
#       h2 = (h2 + 9) MOD 12 
#       e2 = e2 - h2 DIV 10 
#       d2 = 365*e2 + e2 DIV 4 - e2 DIV 100 + e2 DIV 400 + (h2*306 + 5) DIV 10 + n2 - 1 
#       napokszama:= d2-d1 
#   Függvény vége
#------------------------------------------------------------------------------
def napokszama(e1, h1, n1, e2, h2, n2):
    h1 = (h1 + 9) % 12
    e1 = e1 - h1 // 10
    d1= 365*e1 + e1 // 4 - e1 // 100 + e1 // 400 + (h1*306 + 5) // 10 + n1 - 1
    h2 = (h2 + 9) % 12
    e2 = e2 - h2 // 10
    d2= 365*e2 + e2 // 4 - e2 // 100 + e2 // 400 + (h2*306 + 5) // 10 + n2 - 1
    return d2-d1

#-------------------------------------------------------------------------------
# 7.A közlekedési társaság azoknak az utasoknak, akiknek még érvényes, de
#   3 napon belül lejár a bérlete, figyelmeztetést szeretne küldeni e-mailben.
#   (Például, ha a felszállás időpontja 2019. február 5., és a bérlet
#   érvényessége 2019. február 8., akkor már kap az utas levelet, ha
#   2019. február 9. az érvényessége, akkor még nem kap levelet.) Válogassa ki
#   és írja a figyelmeztetes.txt állományba ezen utasok kártyaazonosítóját és
#   a bérlet érvényességi idejét (éééé-hh-nn formátumban) szóközzel elválasztva!
#-------------------------------------------------------------------------------
print('7. feladat - adatok kiírása fájlba')

fki=open('figyelmeztetes.txt','w')
for sor in forgalom:
    if len(sor[4])==8:     #bérletes, nem jegyes
        #felszállás
        datum=sor[1][0:8]   #a második adat első 8 karaktere
        e1=int(datum[0:4])           #év
        h1=int(datum[4:6])           #hónap
        n1=int(datum[6:8])           #nap
        #érvényesség
        ervenyes=sor[4]     #az ötödik adat

        e2=int(ervenyes[0:4])        #év
        h2=int(ervenyes[4:6])        #hónap
        n2=int(ervenyes[6:8])        #nap
        if napokszama(e1, h1, n1, e2, h2, n2) in {0,1,2,3}:
            print(sor[2]+' '+ervenyes[0:4]+'-'+ervenyes[4:6]+'-'+ervenyes[6:8],file=fki)

fki.close()
        











    
