#-------------------------------------------------------------------------------
# 1. Olvassa be az igeny.txt állományban talált adatokat, s azok felhasználásá-
#    val oldja meg a következő feladatokat! Ha az állományt nem tudja beolvasni,
#    az első 8 igényhez tartozó adatokat jegyezze be a programba és dolgozzon
#    azzal!
#-------------------------------------------------------------------------------
def F1():
    print('1. feladat - adatok beolvasása...')

    fbe=open('igeny.txt','r')

    global cspszam                  # 6. és 7. feladatban felhasználjuk
    global szintek                  # 4. feladatban felhasználjuk
    szintek=int(fbe.readline())     # forrásfájl első sora
    cspszam=int(fbe.readline())     # ... második
    igenyszam=int(fbe.readline())   # ... harmadik
    for sor in fbe:                 # további sorok...
        sor=sor.strip().split()     # lista lesz a sorból
        sor=list(map(int,sor))      # a lista elemeit integerré alakítjuk
        igenyek.append(sor)         # a lista "megy" a mátrixba

    fbe.close()
    
    print('-------------------------------------------------------------------')

#-------------------------------------------------------------------------------
# 2. Tudjuk, hogy a megfigyelés kezdetén a lift éppen áll. Kérje be a felhaszná-
#    lótól, hogy melyik szinten áll a lift, és a további részfeladatok megoldá-
#    sánál ezt vegye figyelembe! Ha a beolvasást nem tudja elvégezni, használja
#    az igény.txt fájlban az első igény induló szintjét!
#-------------------------------------------------------------------------------
def F2():
    print('\n2. feladat')
    global hely                     # 5. feladatban felhasználjuk
    hely=int(input('Kérem a lift indulási helyét! '))
    print('-------------------------------------------------------------------')

#-------------------------------------------------------------------------------
# 3. Határozza meg, hogy melyik szinten áll majd a lift az utolsó kérés teljesí-
#    tését követően! Írja képernyőre a választ a következőhöz hasonló formában:
#    „A lift a 33. szinten áll az utolsó igény teljesítése után.” !
#-------------------------------------------------------------------------------
def F3():
    print('\n3. feladat')
    utolso=igenyek[-1][5]           # a mátrix utolsó elemének indexe: -1
    print(f'A lift a {utolso}. szinten áll az utolsó igény teljesítése után.')
    print('-------------------------------------------------------------------')

#-------------------------------------------------------------------------------
# 4. Írja a képernyőre, hogy a megfigyelés kezdete és az utolsó igény teljesí
#    tése között melyik volt a legalacsonyabb és melyik a legmagasabb sorszámú
#    szint, amelyet a lift érintett!
#-------------------------------------------------------------------------------
def F4():
    print('\n4. feladat')
    min_sz=szintek                  # minimumnak a legnagyobb értéket adjuk,
    max_sz=0                        # maximumnak a legkisebbet, majd...
    for igeny in igenyek:
        # induló és cél szint minimuma és a "vélt" minimum közül a kisebbet vesszük
        min_sz=min(min_sz,min(igeny[4],igeny[5]))
        # induló és cél szint maximuma és a "vélt" maximum közül a nagyobbat vesszük
        max_sz=max(max_sz,max(igeny[4],igeny[5]))
    print(f'A legalacsonyabb szint: {min_sz}')
    print(f'A legmagasabb szint: {max_sz}')
    print('-------------------------------------------------------------------')
    
#-------------------------------------------------------------------------------
# 5. Határozza meg, hogy hányszor kellett a liftnek felfelé indulnia utassal és
#    hányszor utas nélkül! Az eredményt jelenítse meg a képernyőn!
#-------------------------------------------------------------------------------
def F5():
    print('\n5. feladat')
    aktual=hely         # ez az a hely, ahol a legelején áll a lift (lsd. 2. feladat)
    ures=0              # megfelelő számlálók inicializálása
    utas=0
    for igeny in igenyek:       # végigmegyünk az igényeken...
        if igeny[4]<igeny[5]:   # ha induló szint kisebb, akkor felfelé megy utassal
            utas+=1             # ... számláló növelése
        if igeny[4]>aktual:     # ha a lift alacsonyabb szinten van a híváskor, 
            ures+=1             # akkor üresen megy fel a szerelőkhöz
        aktual=igeny[5]         # ahol kiszállnak az lesz az "új" altuális hely
    
    print(f'A lift {utas} alkalommal ment felfelé utasokkal')
    print(f'A lift {ures} alkalommal ment felfelé utasok nélkül')
    print('-------------------------------------------------------------------')

#-------------------------------------------------------------------------------
# 6. Határozza meg, hogy mely szerelőcsapatok nem vették igénybe a liftet a
#    vizsgált intervallumban! A szerelőcsapatok sorszámát egymástól egy-egy
#    szóközzel elválasztva írja a képernyőre!
#-------------------------------------------------------------------------------
def F6():
    print('\n6. feladat')
    csapatok=[0]*cspszam        # megszámoljuk, hogy a csapatok hányszor
                                # szerepelnek a mátrixunkban
                                
    for igeny in igenyek:
        # az igenyben szereplő csapatszám indexeli a csapatokat
        # https://odorpeter.hu/tippek_trukkok.html#2
        csapatok[igeny[3]-1]+=1 

    global nem          # következő feladatban felhasználjuk
    nem=set()           # ebben a halmazban gyűjtjük a nem szereplő csapatokat
    print('Ezek a szerelőcsapatok nem vették igénybe a liftet:')

    # szükségünk lesz a csapatok szereplési száma mellett a sorszámukra is,
    # ezért használjuk az enumerate függvényt, 1-től indítva a számozást
    for i,csapat in enumerate(csapatok,start=1):
        if csapat==0:       # ha nem szerepel "megy" a halmazba
            nem.add(i)
            print(i,end=' ')
    print('\n-------------------------------------------------------------------')

#-------------------------------------------------------------------------------
# 7. Előfordul, hogy egyik vagy másik szerelőcsapat áthágja a szabályokat, és
#    egyik szintről gyalog megy a másikra. (Ezt onnan tudhatjuk, hogy más emele-
#    ten igényli a liftet, mint ahova korábban érkezett.) Generáljon véletlen-
#    szerűen egy létező csapatsorszámot! (Ha nem jár sikerrel, dolgozzon a
#    3. csapattal!) Határozza meg, hogy a vizsgált időszak igényei alapján lehet
#    -e egyértelműen bizonyítani, hogy ez a csapat vétett a szabályok ellen!
#    Ha igen, akkor adja meg, hogy melyik két szint közötti utat tették meg gya-
#    log, ellenkező esetben írja ki a Nem bizonyítható szabálytalanság szöveget!
#-------------------------------------------------------------------------------
def F7():
    print('\n7. feladat')
    # 3, 12, 19
    global csapat               # 8. feladatban is kell
    while True:                             # addig generálunk csapatszámot, amíg
        csapat=random.randint(1,cspszam)    # olyan nem lesz, ami tényleg szerepel
        if csapat not in nem:               # a mátrixban (forrásfájlban)
            break
    print(f'A véletlenszerűen kiválasztott csapat: {csapat}')
    
    gyalog=False                # gyalog mennek-e a szerelők
    kezd=True                   # az adott csapat először kezdő állapotát nézem-e
    for igeny in igenyek:
        if igeny[3]==csapat:    # megvan a csapatunk
            if kezd:            # most kezdjük vele a viszgálatot
                kiszallas=igeny[5]  # ahol kiszállnak a liftből
                kezd=False          # innentől már nem kezdőállapotot nézünk majd
            else:               # ez már nem kezdőállapot
                if igeny[4]!=kiszallas:     # ha a beszállási hely eltér attól ahol
                                            # előzőleg hagyták a liftet, akkor
                                            # gyalog mentek a két szint között
                    print(f'Gyalogosan közlekedtek a(z) {kiszallas}. ', end='')
                    print(f'és  a(z) {igeny[4]}. szint között!')
                    gyalog=True         # volt gyaloglás
                kiszallas=igeny[5]      # ezt ne felejtsük el aktualizálni...
                        
    if not gyalog:      # ha nem volt gyaloglás a vizsgálat végén, akkor...
        print('Nem bizonyítható szabálytalanság!')
        
    print('-------------------------------------------------------------------')

#-------------------------------------------------------------------------------
# 8. A munkák elvégzésének adminisztrálásához minden csapatnak egy blokkoló kár-
#    tyát kell használnia. A kártyára a liftben elhelyezett blokkolóóra rögzíti
#    az emeletet, az időpontot. Ennek a készüléknek a segítségével kell megadni
#    a munka kódszámát és az adott munkafolyamat sikerességét. A munka kódja 1
#    és 99 közötti egész szám lehet. A sikerességet a „befejezett” és a „befeje-
#    zetlen” szavakkal lehet jelezni.
#    Egy műszaki hiba folytán az előző feladatban vizsgált csapat kártyájára az
#    általunk nyomon követett időszakban nem került bejegyzés. Ezért a csapatfő-
#    nöknek a műszak végén pótolnia kell a hiányzó adatokat. Az igeny.txt állo-
#    mány adatait felhasználva írja a képernyőre időrendben, hogy a vizsgált
#    időszakban milyen kérdéseket tett fel az óra, és kérje be az adott válaszo-
#    kat a felhasználótól! A pótlólag feljegyzett adatokat írja a blokkol.txt
#    állományba!
#-------------------------------------------------------------------------------
def F8():
    # magánvélemény: ez a feladat egy hülyeség... :)
    print('\n8. feladat - adatok kiírása...')
    fki=open('blokkol.txt','w')
    for igeny in igenyek:
        if igeny[3]==csapat:
            print(f'Indulási emelet: {igeny[4]}')
            print(f'Indulási emelet: {igeny[4]}',file=fki)
            print(f'Célemelet: {igeny[5]}')
            print(f'Célemelet: {igeny[5]}',file=fki)
            fkod=int(input('Feladatkód: '))
            print(f'Feladatkód: {fkod}',file=fki)
            print(f'Befejezés ideje: {igeny[0]}:{igeny[1]}:{igeny[2]}')
            print(f'Befejezés ideje: {igeny[0]}:{igeny[1]}:{igeny[2]}',file=fki)
            siker=input('Sikeresség: ')
            print(f'Sikeresség: {siker}',file=fki)
    fki.close()
    
#------------------------------- F Ő M O D U L -------------------------------
import random
igenyek=[]
F1()
F2()
F3()
F4()
F5()
F6()
F7()
F8()
        
