def kiir(ssz, szoveg):
    print('%d. feladat - %s' % (ssz, szoveg))


# -----------------------------------------------------------------------
# 1. Olvassa be és tárolja el a valaszok.txt szöveges állomány adatait!
# -----------------------------------------------------------------------
kiir(1, 'fájl beolvasása')

fv = open('valaszok.txt', 'r')
megoldas = fv.readline()  # a forrásfájl első sora
print('...')

adatok = []  # mátrix: elemei AZONOSÍTÓ és VÁLASZ

for sor in fv:
    sor = sor.strip().split()
    adatok.append(sor)

fv.close()

# -----------------------------------------------------------------------
# 2. Jelenítse meg a képernyőn a mintának megfelelően, hogy hány
#    versenyző vett részta tesztversenyen!
# -----------------------------------------------------------------------
kiir(2, 'versenyzők száma')

vsz = len(adatok)  # versenyzők száma=fájlból első sor kivételével
# beolvasott adatsorok száma
print('A vetélkedőn {} versenyző indult.'.format(vsz))

# -----------------------------------------------------------------------
# 3. Kérje be egy versenyző azonosítóját, és jelenítse meg a mintának
#    megfelelően a hozzá eltárolt válaszokat! Feltételezheti, hogy a
#    fájlban létező azonosítót adnak meg.
# -----------------------------------------------------------------------
kiir(3, 'versenyző és válasza')

# megkeressük az azonosítót a mátrixban és kiírjuk a válaszát,
# addig ismételtetjük az INPUT parancsot, amíg nem ad meg jó
# azonosító kódot!
van = False
while not van:
    # UPPER - az input egy stringet ad, az lesz nagybetűs
    vaz = input('A versenyző azonosítója = ').upper()
    i = 0
    while i < len(adatok) and adatok[i][0] != vaz:
        i += 1
    if i < len(adatok):
        van = True
        valasz = adatok[i][1]  # 4. feladathoz kell majd
        print('A versenyző válasza: ', valasz)

# -----------------------------------------------------------------------
# 4. Írassa ki a képernyőre a helyes megoldást! A helyes megoldás alatti
#    sorba „+” jelet tegyen, ha az adott feladatot az előző feladatban
#    kiválasztott versenyző eltalálta, egyébként egy szóközt! A kiírást
#    a mintának megfelelő módon alakítsa ki!
# -----------------------------------------------------------------------
kiir(4, 'a megoldás és a versenyző válasza')

print(megoldas, end='')
for i in range(len(valasz)):
    if valasz[i] == megoldas[i]:
        print('+', end='')
    else:
        print(' ', end='')
print()

# -----------------------------------------------------------------------
# 5. Kérje be egy feladat sorszámát, majd határozza meg, hogy hány
#    versenyző adott a feladatra helyes megoldást, és ez a versenyzők
#    hány százaléka! A százalékos eredményt a mintának megfelelően,
#    két tizedesjeggyel írassa ki!
# -----------------------------------------------------------------------
kiir(5, 'egy adott feladatra adott helyes válaszok aránya')

letszam = len(adatok)

# feladat sorszáma: 1-14 közötti szám
# megpróbáljuk rávenni a felhasználót, hogy 1-14 közötti számot adjon meg!
# (ez nem követelmény!)

while True:
    try:
        sorszam = int(input('A feladat sorszáma = '))
        if sorszam < 1 or sorszam > 14:
            print('1-14 közötti számot kell megadni!!')
        else:
            break
    except ValueError:
        print('Csalódtam benned!')
sorszam -= 1  # -1 az indexelés miatt, szokásos :(
szamlalo = 0  # helyes megoldások száma, gyakorlatilag összegzés következik
for adat in adatok:
    valasz = adat[1]  # a második eleme az adatnak a válasz
    if valasz[sorszam] == megoldas[sorszam]:
        szamlalo += 1
arany = szamlalo / letszam
print(f'A feladatra {szamlalo} fő, a versenyzők {arany * 100:.2f}%-a adott helyes választ.')

# -----------------------------------------------------------------------
# 6. A verseny feladatai nem egyenlő nehézségűek:
#    az 1-5. feladat 3 pontot, a 6-10. feladat 4 pontot,
#    a 11-13. feladat 5 pontot, míg a 14. feladat 6 pontot ér.
#    Határozza meg az egyes versenyzők pontszámát, és a listát írassa
#    ki a pontok.txt nevű állományba! Az állomány minden sora egy
#    versenyző kódját, majd szóközzel elválasztva az általa elért
#    pontszámot tartalmazza!
# -----------------------------------------------------------------------
kiir(6, 'versenyzők pontszámának meghatározása')
print('...')

pontok = [3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 6]


# ez a lista jelentősen leegyszerűsíti a megoldást

def pontszamitas(valasz):
    pontszam = 0
    for i in range(len(valasz)):
        if valasz[i] == megoldas[i]:
            # i-dik válasz jó, akkor i-dik pont a pontok listából
            pontszam += pontok[i]
    return pontszam


fv = open('pontok.txt', 'w')

dijazas = []  # 7.feladathoz kell majd
for adat in adatok:
    pontszam = pontszamitas(adat[1])
    # 7.feladat miatt külön változóba kerül a pontszám
    print(adat[0], pontszam, file=fv)
    # 7.feladat hatására, rögzítjük az eredményeket
    dijazas.append([adat[0], pontszam])
fv.close()

# -----------------------------------------------------------------------
# 7. A versenyen a három legmagasabb pontszámot elérő összes versenyzőt
#    díjazzák. Például 5 indulónál előfordulhat, hogy 3 első és 2
#    második díjat adnak ki. Így megtörténhet az is, hogy nem kerül sor
#    mindegyik díj kiadására. Írassa ki a mintának megfelelően a
#    képernyőre a díjazottak kódját és pontszámát pontszám szerint
#    csökkenő sorrendben!
# -----------------------------------------------------------------------
kiir(7, 'versenyzők díjazása')


# ez a feladat hatással van az előzőre, a 6. feladatra. Ne csak fájlba
# írjuk az azonosítót és a pontszámot, hanem rögzítsük is egy mátrixban
# ezeket az adatokat! ---> dijazas "mátrix"

# rendezzük be a "mátrixot" pontszám szerint csökkenő sorrendbe!

def pontszam_szerint(elem):
    return elem[1]  # 1-es index, azaz a másod elem vagyis a pontszám


dijazas = sorted(dijazas, key=pontszam_szerint, reverse=True)

print('A verseny legjobbjai:')

dijazottak_szama = 1  # maximum 3 lehet
helyezes = 1  # helyezési sorrend, pl.: 1. vagy 2., stb....
# a rendezett "mátrix" első sor az 1. helyezettet tartalmazza
# ezt kiiírjuk, és a következő versenyzőt hozzás viszonyítjuk...
print('{}. díj ({} pont): {}'.format(helyezes, dijazas[0][1], dijazas[0][0]))
i = 1  # másodiktól megy majd a ciklus (while)
while dijazottak_szama < 4:
    if dijazas[i][1] != dijazas[i - 1][1]:  # ha eltérő pontszám jön, akkor...
        helyezes += 1  # ...növeljük a helyzési sorszámot
    print('{}. díj ({} pont): {}'.format(helyezes, dijazas[i][1], dijazas[i][0]))
    dijazottak_szama += 1  # ez független a helyezéstől
    i += 1  # ez csak azért kell, hogy ne a
    # dijazottak_szama változót használjam indexnek