def feladat(f):
    print(f'{"-"*75}\n{f}. feladat')

osvenyek=[sor.strip() for sor in open('osvenyek.txt','r')]
dobasok=list(map(int,open('dobasok.txt','r').readline().strip().split()))

feladat(2)
print(f'A dobások száma: {len(dobasok)}')
print(f'Az ösvények száma: {len(osvenyek)}')

feladat(3)
maxh_osv=max(osvenyek,key=lambda osveny:len(osveny))
ssz=osvenyek.index(maxh_osv)+1
print(f'Az egyik leghosszabb a(z) {ssz}. ösvény, hossza: {len(maxh_osv)}')

feladat(4)
osveny=osvenyek[int(input('Adja meg egy ösvény sorszámát! '))-1]
jsz=int(input('Adja meg a játékosok számát! '))

feladat(5)
lista=list(osveny)
[print(f'{mezo}: {lista.count(mezo)} darab') for mezo in ['M','V','E'] if lista.count(mezo)>0]

with open('kulonleges.txt','w') as fki:
    [print(f'{i+1}\t{osveny[i]}',file=fki) for i in range(len(osveny)) if osveny[i]!='M']
    
feladat(7)
poziciok=[0]*jsz                            # jsz==5  [0,0,0,0,0]  dobások összegzése játékosonként
for i in range(0,len(dobasok)-jsz,jsz):     # dobasok 2 4 6 5 6 1 4 1 3 4 5 1 2 4 6 2 3 3 5 5 ...
    aktualis_kor=dobasok[i:i+jsz]           # aktualis_kor például  [2, 4, 6, 5, 6] ha jsz=5
    for j in range(jsz):
        poziciok[j]+=aktualis_kor[j]
    if max(poziciok)>=len(osveny):          # valaki elérte-e az ösvény végét
        nyertes=poziciok.index(max(poziciok))+1 
        break        
print(f'A játék a(z) {i//jsz+1}. körben fejeződött be. A legtávolabb jutó(k) sorszáma: {nyertes}')

feladat(8)
poziciok=[0]*jsz    # ha pl. jsz==5 --> [0,0,0,0,0]  tulajdonképpen a dobások összegzése játékosonként
nyertesek=[]
for i in range(0,len(dobasok)-jsz,jsz):     # dobasok 2 4 6 5 6 1 4 1 3 4 5 1 2 4 6 2 3 3 5 5 ...
    aktualis_kor=dobasok[i:i+jsz]           # aktualis_kor például  [2, 4, 6, 5, 6] ha jsz=5
    for j in range(jsz):
        poziciok[j]+=aktualis_kor[j]    # amekkorát dobott a j. játékos, azt hozzáadjuk a pozíciójához
        if poziciok[j]<len(osveny):     # ha még nem ért célba, akkor
            match osveny[poziciok[j]-1]:    # a mező, amin éppen áll a játékos speciális-e (E, vagy V)
                case 'E': poziciok[j]+=aktualis_kor[j]
                case 'V': poziciok[j]-=aktualis_kor[j]        
    # ha valaki elérte az osvény végét, sorszáma bekerül a nyertesek listába
    if len([nyertesek.append(j+1) for j in range(jsz) if poziciok[j]>=len(osveny)])>0:        
        break       # ha a nyertesek lista már nem üres, akkor végeztünk...
print('Nyertesek:',end=' ')
[print(nyertesek[i],end=' ') for i in range(len(nyertesek))]
print(f'\nA többiek pozíciója a(z) {len(osveny)} hosszú ösvényen:')
[print(f'{i+1}. játékos: {poziciok[i]}. mező')for i in range(jsz) if i+1 not in nyertesek]






