lud202310info_sort.py
1    def feladat(f):
2        print(f'{'-'*75}\n{f}. feladat')
3        
4    osvenyek=[sor.strip() for sor in open('osvenyek.txt','r')]
5    dobasok=list(map(int,open('dobasok.txt','r').readline().strip().split()))
6    
7    feladat(2)
8    print(f'A dobások száma: {len(dobasok)}')
9    print(f'Az ösvények száma: {len(osvenyek)}')
10   
11   feladat(3)
12   maxh_osv=max(osvenyek,key=lambda osveny:len(osveny))
13   ssz=osvenyek.index(maxh_osv)+1
14   print(f'Az egyik leghosszabb a(z) {ssz}. ösvény, hossza: {len(maxh_osv)}')
15   
16   feladat(4)
17   osveny=osvenyek[int(input('Adja meg egy ösvény sorszámát! '))-1]
18   jsz=int(input('Adja meg a játékosok számát! '))
19   
20   feladat(5)
21   lista=list(osveny)
22   [print(f'{mezo}: {lista.count(mezo)} darab') for mezo in ['M','V','E'] if lista.count(mezo)>0]
23   
24   with open('kulonleges.txt','w') as fki:
25       [print(f'{i+1}\t{osveny[i]}',file=fki) for i in range(len(osveny)) if osveny[i]!='M']
26       
27   feladat(7)
28   poziciok=[0]*jsz                            # jsz==5  [0,0,0,0,0]  dobások összegzése játékosonként
29   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 ...
30       aktualis_kor=dobasok[i:i+jsz]           # aktualis_kor például  [2, 4, 6, 5, 6] ha jsz=5
31       for j in range(jsz):
32           poziciok[j]+=aktualis_kor[j]
33       if max(poziciok)>=len(osveny):          # valaki elérte-e az ösvény végét
34           nyertes=poziciok.index(max(poziciok))+1 
35           break        
36   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}')
37   
38   feladat(8)
39   poziciok=[0]*jsz    # ha pl. jsz==5 --> [0,0,0,0,0]  tulajdonképpen a dobások összegzése játékosonként
40   nyertesek=[]
41   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 ...
42       aktualis_kor=dobasok[i:i+jsz]           # aktualis_kor például  [2, 4, 6, 5, 6] ha jsz=5
43       for j in range(jsz):
44           poziciok[j]+=aktualis_kor[j]    # amekkorát dobott a j. játékos, azt hozzáadjuk a pozíciójához
45           if poziciok[j]<len(osveny):     # ha még nem ért célba, akkor
46               match osveny[poziciok[j]-1]:    # a mező, amin éppen áll a játékos speciális-e (E, vagy V)
47                   case 'E': poziciok[j]+=aktualis_kor[j]
48                   case 'V': poziciok[j]-=aktualis_kor[j]        
49       # ha valaki elérte az osvény végét, sorszáma bekerül a nyertesek listába
50       if len([nyertesek.append(j+1) for j in range(jsz) if poziciok[j]>=len(osveny)])>0:        
51           break       # ha a nyertesek lista már nem üres, akkor végeztünk...
52   print('Nyertesek:',end=' ')
53   [print(nyertesek[i],end=' ') for i in range(len(nyertesek))]
54   print(f'\nA többiek pozíciója a(z) {len(osveny)} hosszú ösvényen:')
55   [print(f'{i+1}. játékos: {poziciok[i]}. mező')for i in range(jsz) if i+1 not in nyertesek]
56   
57   
58   
59   
60   
61   
62