1 #-------------------------------------------------------------------------------
2 # 1. Olvassa be az igeny.txt állományban talált adatokat, s azok felhasználásá-
3 # val oldja meg a következő feladatokat! Ha az állományt nem tudja beolvasni,
4 # az első 8 igényhez tartozó adatokat jegyezze be a programba és dolgozzon
5 # azzal!
6 #-------------------------------------------------------------------------------
7 def F1():
8 print('1. feladat - adatok beolvasása...')
9
10 fbe=open('igeny.txt','r')
11
12 global cspszam # 6. és 7. feladatban felhasználjuk
13 global szintek # 4. feladatban felhasználjuk
14 szintek=int(fbe.readline()) # forrásfájl első sora
15 cspszam=int(fbe.readline()) # ... második
16 igenyszam=int(fbe.readline()) # ... harmadik
17 for sor in fbe: # további sorok...
18 sor=sor.strip().split() # lista lesz a sorból
19 sor=list(map(int,sor)) # a lista elemeit integerré alakítjuk
20 igenyek.append(sor) # a lista "megy" a mátrixba
21
22 fbe.close()
23
24 print('-------------------------------------------------------------------')
25
26 #-------------------------------------------------------------------------------
27 # 2. Tudjuk, hogy a megfigyelés kezdetén a lift éppen áll. Kérje be a felhaszná-
28 # lótól, hogy melyik szinten áll a lift, és a további részfeladatok megoldá-
29 # sánál ezt vegye figyelembe! Ha a beolvasást nem tudja elvégezni, használja
30 # az igény.txt fájlban az első igény induló szintjét!
31 #-------------------------------------------------------------------------------
32 def F2():
33 print('\n2. feladat')
34 global hely # 5. feladatban felhasználjuk
35 hely=int(input('Kérem a lift indulási helyét! '))
36 print('-------------------------------------------------------------------')
37
38 #-------------------------------------------------------------------------------
39 # 3. Határozza meg, hogy melyik szinten áll majd a lift az utolsó kérés teljesí-
40 # tését követően! Írja képernyőre a választ a következőhöz hasonló formában:
41 # „A lift a 33. szinten áll az utolsó igény teljesítése után.” !
42 #-------------------------------------------------------------------------------
43 def F3():
44 print('\n3. feladat')
45 utolso=igenyek[-1][5] # a mátrix utolsó elemének indexe: -1
46 print(f'A lift a {utolso}. szinten áll az utolsó igény teljesítése után.')
47 print('-------------------------------------------------------------------')
48
49 #-------------------------------------------------------------------------------
50 # 4. Írja a képernyőre, hogy a megfigyelés kezdete és az utolsó igény teljesí
51 # tése között melyik volt a legalacsonyabb és melyik a legmagasabb sorszámú
52 # szint, amelyet a lift érintett!
53 #-------------------------------------------------------------------------------
54 def F4():
55 print('\n4. feladat')
56 min_sz=szintek # minimumnak a legnagyobb értéket adjuk,
57 max_sz=0 # maximumnak a legkisebbet, majd...
58 for igeny in igenyek:
59 # induló és cél szint minimuma és a "vélt" minimum közül a kisebbet vesszük
60 min_sz=min(min_sz,min(igeny[4],igeny[5]))
61 # induló és cél szint maximuma és a "vélt" maximum közül a nagyobbat vesszük
62 max_sz=max(max_sz,max(igeny[4],igeny[5]))
63 print(f'A legalacsonyabb szint: {min_sz}')
64 print(f'A legmagasabb szint: {max_sz}')
65 print('-------------------------------------------------------------------')
66
67 #-------------------------------------------------------------------------------
68 # 5. Határozza meg, hogy hányszor kellett a liftnek felfelé indulnia utassal és
69 # hányszor utas nélkül! Az eredményt jelenítse meg a képernyőn!
70 #-------------------------------------------------------------------------------
71 def F5():
72 print('\n5. feladat')
73 aktual=hely # ez az a hely, ahol a legelején áll a lift (lsd. 2. feladat)
74 ures=0 # megfelelő számlálók inicializálása
75 utas=0
76 for igeny in igenyek: # végigmegyünk az igényeken...
77 if igeny[4]<igeny[5]: # ha induló szint kisebb, akkor felfelé megy utassal
78 utas+=1 # ... számláló növelése
79 if igeny[4]>aktual: # ha a lift alacsonyabb szinten van a híváskor,
80 ures+=1 # akkor üresen megy fel a szerelőkhöz
81 aktual=igeny[5] # ahol kiszállnak az lesz az "új" altuális hely
82
83 print(f'A lift {utas} alkalommal ment felfelé utasokkal')
84 print(f'A lift {ures} alkalommal ment felfelé utasok nélkül')
85 print('-------------------------------------------------------------------')
86
87 #-------------------------------------------------------------------------------
88 # 6. Határozza meg, hogy mely szerelőcsapatok nem vették igénybe a liftet a
89 # vizsgált intervallumban! A szerelőcsapatok sorszámát egymástól egy-egy
90 # szóközzel elválasztva írja a képernyőre!
91 #-------------------------------------------------------------------------------
92 def F6():
93 print('\n6. feladat')
94 csapatok=[0]*cspszam # megszámoljuk, hogy a csapatok hányszor
95 # szerepelnek a mátrixunkban
96
97 for igeny in igenyek:
98 # az igenyben szereplő csapatszám indexeli a csapatokat
99 # https://odorpeter.hu/tippek_trukkok.html#2
100 csapatok[igeny[3]-1]+=1
101
102 global nem # következő feladatban felhasználjuk
103 nem=set() # ebben a halmazban gyűjtjük a nem szereplő csapatokat
104 print('Ezek a szerelőcsapatok nem vették igénybe a liftet:')
105
106 # szükségünk lesz a csapatok szereplési száma mellett a sorszámukra is,
107 # ezért használjuk az enumerate függvényt, 1-től indítva a számozást
108 for i,csapat in enumerate(csapatok,start=1):
109 if csapat==0: # ha nem szerepel "megy" a halmazba
110 nem.add(i)
111 print(i,end=' ')
112 print('\n-------------------------------------------------------------------')
113
114 #-------------------------------------------------------------------------------
115 # 7. Előfordul, hogy egyik vagy másik szerelőcsapat áthágja a szabályokat, és
116 # egyik szintről gyalog megy a másikra. (Ezt onnan tudhatjuk, hogy más emele-
117 # ten igényli a liftet, mint ahova korábban érkezett.) Generáljon véletlen-
118 # szerűen egy létező csapatsorszámot! (Ha nem jár sikerrel, dolgozzon a
119 # 3. csapattal!) Határozza meg, hogy a vizsgált időszak igényei alapján lehet
120 # -e egyértelműen bizonyítani, hogy ez a csapat vétett a szabályok ellen!
121 # Ha igen, akkor adja meg, hogy melyik két szint közötti utat tették meg gya-
122 # log, ellenkező esetben írja ki a Nem bizonyítható szabálytalanság szöveget!
123 #-------------------------------------------------------------------------------
124 def F7():
125 print('\n7. feladat')
126 # 3, 12, 19
127 global csapat # 8. feladatban is kell
128 while True: # addig generálunk csapatszámot, amíg
129 csapat=random.randint(1,cspszam) # olyan nem lesz, ami tényleg szerepel
130 if csapat not in nem: # a mátrixban (forrásfájlban)
131 break
132 print(f'A véletlenszerűen kiválasztott csapat: {csapat}')
133
134 gyalog=False # gyalog mennek-e a szerelők
135 kezd=True # az adott csapat először kezdő állapotát nézem-e
136 for igeny in igenyek:
137 if igeny[3]==csapat: # megvan a csapatunk
138 if kezd: # most kezdjük vele a viszgálatot
139 kiszallas=igeny[5] # ahol kiszállnak a liftből
140 kezd=False # innentől már nem kezdőállapotot nézünk majd
141 else: # ez már nem kezdőállapot
142 if igeny[4]!=kiszallas: # ha a beszállási hely eltér attól ahol
143 # előzőleg hagyták a liftet, akkor
144 # gyalog mentek a két szint között
145 print(f'Gyalogosan közlekedtek a(z) {kiszallas}. ', end='')
146 print(f'és a(z) {igeny[4]}. szint között!')
147 gyalog=True # volt gyaloglás
148 kiszallas=igeny[5] # ezt ne felejtsük el aktualizálni...
149
150 if not gyalog: # ha nem volt gyaloglás a vizsgálat végén, akkor...
151 print('Nem bizonyítható szabálytalanság!')
152
153 print('-------------------------------------------------------------------')
154
155 #-------------------------------------------------------------------------------
156 # 8. A munkák elvégzésének adminisztrálásához minden csapatnak egy blokkoló kár-
157 # tyát kell használnia. A kártyára a liftben elhelyezett blokkolóóra rögzíti
158 # az emeletet, az időpontot. Ennek a készüléknek a segítségével kell megadni
159 # a munka kódszámát és az adott munkafolyamat sikerességét. A munka kódja 1
160 # és 99 közötti egész szám lehet. A sikerességet a „befejezett” és a „befeje-
161 # zetlen” szavakkal lehet jelezni.
162 # Egy műszaki hiba folytán az előző feladatban vizsgált csapat kártyájára az
163 # általunk nyomon követett időszakban nem került bejegyzés. Ezért a csapatfő-
164 # nöknek a műszak végén pótolnia kell a hiányzó adatokat. Az igeny.txt állo-
165 # mány adatait felhasználva írja a képernyőre időrendben, hogy a vizsgált
166 # időszakban milyen kérdéseket tett fel az óra, és kérje be az adott válaszo-
167 # kat a felhasználótól! A pótlólag feljegyzett adatokat írja a blokkol.txt
168 # állományba!
169 #-------------------------------------------------------------------------------
170 def F8():
171 # magánvélemény: ez a feladat egy hülyeség... :)
172 print('\n8. feladat - adatok kiírása...')
173 fki=open('blokkol.txt','w')
174 for igeny in igenyek:
175 if igeny[3]==csapat:
176 print(f'Indulási emelet: {igeny[4]}')
177 print(f'Indulási emelet: {igeny[4]}',file=fki)
178 print(f'Célemelet: {igeny[5]}')
179 print(f'Célemelet: {igeny[5]}',file=fki)
180 fkod=int(input('Feladatkód: '))
181 print(f'Feladatkód: {fkod}',file=fki)
182 print(f'Befejezés ideje: {igeny[0]}:{igeny[1]}:{igeny[2]}')
183 print(f'Befejezés ideje: {igeny[0]}:{igeny[1]}:{igeny[2]}',file=fki)
184 siker=input('Sikeresség: ')
185 print(f'Sikeresség: {siker}',file=fki)
186 fki.close()
187
188 #------------------------------- F Ő M O D U L -------------------------------
189 import random
190 igenyek=[]
191 F1()
192 F2()
193 F3()
194 F4()
195 F5()
196 F6()
197 F7()
198 F8()
199
200