def feladat(f):
    print(f)

# ----------------------------------------------------------
# 1. Olvassa be és tárolja el a naplo.txt fájl tartalmát!
# ----------------------------------------------------------
feladat('1. feladat - naplo.txt fájl beolvasása')

fv = open('naplo.txt', 'r')

adatok = []  # ez lesz a "mátrix"
adat = []  # ez a lista lesz a mátrix egy eleme

for sor in fv:
    sor = sor.split()
    if sor[0] == '#':
        eleje = (sor[1], sor[2])  # hónap, nap
    else:
        # a "mátrixba" kerül a hónap,nap mellé a név, és hiányzás
        adat.append(eleje[0])  # hónap
        adat.append(eleje[1])  # nap
        adat.append(sor[0] + ' ' + sor[1])  # teljes név
        adat.append(sor[2])  # hiányzások

        adatok.append(adat)  # adat lista adatok listába
    adat = []

fv.close()

# ----------------------------------------------------------------
# 2. Határozza meg és írassa ki, hogy hány sor van a fájlban, ami
#    hiányzást rögzít! (A fenti példában 3 ilyen bejegyzés van.)
# ----------------------------------------------------------------
feladat('2. feladat - beolvasott hiányzások száma')
print('A naplóban %d bejegyzés van.' % len(adatok))

# ----------------------------------------------------------------
# 3. Számolja meg és írassa ki, hogy összesen hány óra igazolt
#    és hány óra igazolatlan hiányzás volt a félév során!
# ----------------------------------------------------------------
feladat('3. feladat - igazolt, igazolatlan összesen')

igazolt = 0
igazolatlan = 0

for adat in adatok:
    igazolt += adat[3].count('X')
    igazolatlan += adat[3].count('I')

kiir = 'Az igazolt hiányzások száma %d, az igazolatlanoké %d óra.'
print(kiir % (igazolt, igazolatlan))

# -----------------------------------------------------------------------
# 4. Készítsen függvényt hetnapja néven, amely a paraméterként megadott
#    dátumhoz (hónap, nap) megadja, hogy az a hét melyik napjára esik
#    (hétfő, kedd…). Tudjuk, hogy az adott év nem volt szökőév, továbbá
#    azt is, hogy január elseje hétfőre esett. Használhatja az alábbi
#    algoritmust is, ahol a tömbök indexelése 0-val kezdődik, de ettől
#    eltérő megoldású függvényt is készíthet.
#      Függvény hetnapja(honap:egesz, nap:egesz): szöveg
#        napnev[]:=("vasarnap","hetfo","kedd","szerda","csutortok",
#                   "pentek","szombat")
#        napszam[]:= (0,31,59,90,120,151,181,212,243,273,304,335)
#        napsorszam:= (napszam[honap-1]+nap) MOD 7
#        hetnapja:=napnev[napsorszam]
#      Függvény vége
# ----------------------------------------------------------------------
def hetnapja(honap, nap):
    napev = [’vasarnap’, ’hetfo’, ’kedd’, ’szerda’, ’csutortok’, ’pentek’, ’szombat’]
    napszam = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 335]
    napsorszam = (napszam[honap - 1] + nap) % 7

    return napnev[napsorszam]

# ----------------------------------------------------------------------
# 5. Kérjen be egy dátumot (hónap, nap), és a hetnapja függvény
#    felhasználásával írassa ki, hogy az a hét melyik napjára esett!
# ----------------------------------------------------------------------
feladat('5. feladat - adott hónap, nap milyen napra esik')

honap = int(input('A hónap sorszáma='))
nap = int(input('A nap sorszáma='))

hetnapja(honap, nap)
print('Azon a napon {} volt.'.format(hetnapja(honap, nap)))

# ----------------------------------------------------------------------
# 6. Kérje be a hét egy tanítási napjának nevét és egy aznapi tanítási
#    óra óraszámát (például: kedd 3)! Írassa ki a képernyőre, hogy a
#    félév során az adott tanítási órára összesen hány hiányzás jutott!
# ----------------------------------------------------------------------
feladat('6. feladat - Adott napra, órára eső hiányzások száma')

vizsgalando_nap = input('A nap neve=')
ora = int(input('Az óra sorszáma='))
# egyszerű feltételes összegzési algoritmus
hianyzas = 0
for adat in adatok:
    honap = int(adat[0])
    nap = int(adat[1])
    if vizsgalando_nap == hetnapja(honap, nap):
        if adat[3][ora - 1] == 'X' or adat[3][ora - 1] == 'I':
            hianyzas += 1

print('Ekkor összesen %d óra hiányzás történt.' % hianyzas)

# ----------------------------------------------------------------------
# 7. Írassa ki a képernyőre a legtöbb órát hiányzó tanuló nevét!
#    Ha több ilyen tanuló is van, akkor valamennyi neve jelenjen meg
#    szóközzel elválasztva!
# ----------------------------------------------------------------------
feladat('7. feladat - Legtöbbet hiányzó tanulók')

nevek = set()  # a neveket egy halmazban gyűjtjük...

for adat in adatok:
    nevek.add(adat[2])  # ...így minden név csak egyszer fog szerepelni

statisztika = []
for nev in nevek:  # végig megyünk a neveken
    hianyzas = 0  # egy adott névhez összegzünk
    for adat in adatok:  # végig megyünk az összes adaton, és...
        if nev == adat[2]:  # ha az éppen feldolgozandó név "jön", akkor...
            hianyzas += adat[3].count('X')  # összegezzük a hiányzásokat
            hianyzas += adat[3].count('I')
    statisztika.append((hianyzas, nev))  # a listába kerül a hiányzás, név kettős

statisztika = sorted(statisztika, reverse=True)  # rendezzük csökkenőbe
print('A legtöbbet hiányzó tanulók:', end=' ')
maxi = statisztika[0][0]  # a legnagyobb van elől
i = 0
while statisztika[i][0] == maxi:  # addig írjuk a neveket, amíg max hiányzás van
    print(statisztika[i][1], end=' ')
    i += 1
print('\n')

