"""
2023. október: Társas
@author Klemand67
"""

print("\n1. feladat\n")

betxt = open("osvenyek.txt")

osvenyek=[]

for sor in betxt:
    osvenyek.append(list(sor.strip()))
      
betxt.close()

betxt = open("dobasok.txt")

sor=betxt.readline()
darsor=sor.strip().split()
dobasok=list(map(int,darsor))
     
betxt.close()

print("A beolvasás és a szövegfájl lezárása sikeresen befejeződött.")



print("\n2. feladat\n")

print(f'A dobások száma:  {len(dobasok)}')
print(f'Az ösvények száma:  {len(osvenyek)}')



print("\n3. feladat\n")

osvhosszak=list(map(lambda osv: len(osv), osvenyek))
maxhossz=max(osvhosszak)

maxindexek=list(filter(lambda i: osvhosszak[i]==maxhossz, range(len(osvhosszak))))
maxsorszamok=list(map(lambda i: str(i+1), maxindexek))

print(f'A leghosszabb a(z) {maxsorszamok[0]}. ösvény, hossza: {maxhossz}')

print("\nSzorgalmi: az összes maximális hosszúságú ösvény megadása")
print(f'A leghosszabb(ak) a(z) {" ".join(maxsorszamok)} ösvény(ek), hossza(uk): {maxhossz}\n')



print("\n4. feladat\n")

ssz=int(input("Adja meg egy ösvény sorszámát! "))
n=int(input("Adja meg a játékosok számát (legalább 2, legfeljebb 5)! "))



print("\n5. feladat\n")

aktosv=osvenyek[ssz-1]
tipus=["M","V","E"]
tipusdb=[]

for i in range(3):
    szures=list(filter(lambda t: t==tipus[i], aktosv))
    tipusdb.append(len(szures))
    
for i in range(3):
    if tipusdb[i]>0:
        print(f'{tipus[i]}: {tipusdb[i]} darab')
    


print("\n6. feladat\n")

kitxt = open("kulonleges.txt","w")

for i,o in enumerate(aktosv):
    if o!="M":
        kitxt.write(f'{i+1}\t{o}\n')

kitxt.close()
print("A kiíratás és a szövegfájl lezárása sikeresen befejeződött.")



print("\n7. feladat\n")

jatekosokdobasai=[]

for i in range(n):
    indexszures=list(filter(lambda j: j%5==i, range(len(dobasok))))
    dobasszures=list(map(lambda j: dobasok[j], indexszures))
    jatekosokdobasai.append(dobasszures)
   
jatekosokakthelyei=[]
maxhely=len(aktosv)

for i in range(n):
    aktdobasok=jatekosokdobasai[i]
    akthelyek=[]
    honnan=0
    d=0
    while True:
        hova=honnan+aktdobasok[d]
        akthelyek.append(hova)
        honnan=hova
        d+=1
        if hova>maxhely:
            break
    jatekosokakthelyei.append(akthelyek)

lepesek=[]

for i in range(n):
    lepesek.append(len(jatekosokakthelyei[i]))

minlepes=min(lepesek)

nyertesek=list(filter(lambda i: lepesek[i]==minlepes, range(len(lepesek))))
nyertessorszamok=list(map(lambda i: str(i+1), nyertesek))                         
        
print(f'A játék a(z) {d}. körben fejeződött be. A legtávolabb jutó(k) sorszáma: {nyertessorszamok[0]}')

print("\nSzorgalmi: az összes legtávolabb jutó játékos megadása")
print(f'A játék a(z) {d}. körben fejeződött be. A legtávolabb jutó(k) sorszáma: {" ".join(nyertessorszamok)}\n')
    


print("\n8. feladat\n")

jatekosokakthelyei=[]

for i in range(n):
    aktdobasok=jatekosokdobasai[i]
    akthelyek=[]
    honnan=0
    d=0
    while True:
        hova=honnan+aktdobasok[d]
        if hova<maxhely:
            if aktosv[hova-1]=="E":
                hova+=aktdobasok[d]
            if aktosv[hova-1]=="V":
                hova=honnan
        akthelyek.append(hova)
        honnan=hova
        d+=1
        if hova>maxhely:
            break
    jatekosokakthelyei.append(akthelyek)

lepesek=[]

for i in range(n):
    lepesek.append(len(jatekosokakthelyei[i]))

minlepes=min(lepesek)

nyertesek=list(filter(lambda i: lepesek[i]==minlepes, range(len(lepesek))))
nyertessorszamok=list(map(lambda i: str(i+1), nyertesek))                         

print(f'Nyertesek: {" ".join(nyertessorszamok)}\n')
print("A többiek pozíciója:")

for i in range(n):
    if lepesek[i]>minlepes:
        print(f'{i+1}. játékos, {jatekosokakthelyei[i][minlepes-1]}. mező') 

input("\nA befejezéshez nyomd meg az ENTER billentyűt!")
