|
park202210dk_emelt_dict.py
|
1 #---------------------------------------------------------------------
2 # 1. Olvassa be a felajanlas.txt állomány tartalmát, tárolja el a
3 # felajánlások adatait, és annak felhasználásával oldja meg a
4 # következő feladatokat!
5 #---------------------------------------------------------------------
6
7 fbe=open('felajanlas.txt','r')
8 N=int(fbe.readline().strip())
9 park={} # szótár (dictionary) típussal oldjuk meg a feladatot
10 for i,elem in enumerate(fbe,start=1): # nem kell a klasszikus indexelés
11 elem=elem.strip().split()
12 elem[0]=int(elem[0])
13 elem[1]=int(elem[1])
14 park[i]=elem # szótár feltöltése: minden bejegyzés egy lista
15 fbe.close()
16 #print(park)
17 #---------------------------------------------------------------------
18 # 2. Írja ki, hány felajánlást tartalmaz az állomány!
19 #---------------------------------------------------------------------
20 print('2. feladat')
21 print(f'A felajánlások száma: {len(park)}')
22 #---------------------------------------------------------------------
23 # 3. Jelenítse meg a képernyőn azon felajánlások sorszámát, amelyek
24 # a bejárat bal és jobb oldalán található ágyást is beültetnék!
25 # A sorszámokat egy-egy szóközzel válassza el egymástól!
26 #---------------------------------------------------------------------
27 print('3. feladat')
28 print('A bejárat mindkét oldalán ültetők:',end=' ')
29 for k,v in park.items(): # szótár bejárása: k - kulcs, v - value
30 if v[0]>v[1]: # a v egy lista, ugye!
31 print(k,end=' ') # kulcsok 1-től N-ig vannak
32 print()
33 #---------------------------------------------------------------------
34 # 4. Kérje be a felhasználótól egy ágyás sorszámát! A tesztelés során
35 # használhatja az 1. ágyást, amelyet többen is beültetnének és a
36 # 269. ágyást, amelynek beültetésére senki sem vállalkozik.
37 # a) Írja a képernyőre, hogy hány felajánlásban szerepel ez
38 # az ágyás!
39 # b) Adja meg, milyen színű lesz ez az ágyás, ha mindenki a
40 # felajánlások sorrendjében végzi el az ültetést, de nem
41 # ültet, ha másvalaki előtte már ültetett oda! Ha nem
42 # ültetett oda senki, akkor „Ezt az ágyást nem ültetik be.”
43 # szöveget jelenítse meg!
44 # c) Adja meg, milyen színekben pompázna ez az ágyás, ha az
45 # eredeti tervvel ellentétesen minden felajánló elültetné
46 # virágait! Minden színt csak egyszer tüntessen fel!
47 # Az egyes színeket szóközökkel válassza el egymástól! Ha nem
48 # ültettek oda virágot, ne jelenítsen meg semmit!
49 #---------------------------------------------------------------------
50 print('4. feladat')
51 agyas_ssz=int(input('Adja meg az ágyás sorszámát! '))
52
53 db=0 # hány darab vállalásban szerepel
54 szin=[] # lista legyen, hogy az 1. elemre majd hivatkozhassunk (63. sor)
55 for v in park.values():
56 eltol=N if v[0]>v[1] else 0 # kapu körüli vállalás: így egyszerűbb
57 if v[0]<=agyas_ssz+eltol<=v[1]+eltol:
58 db+=1
59 szin.append(v[2])
60
61 print(f'A felajánlók száma: {db}')
62 if db>0:
63 print(f'A virágágyás színe, ha csak az első ültet: {szin[0]}')
64 print(f'A virágágyás színei:',end=' ')
65 for sz in set(szin): # itt legyen halmaz, minden szín csak 1-szer
66 print(sz,end=' ')
67 else:
68 print('Ezt az ágyást nem ültetik be.')
69 print()
70 #---------------------------------------------------------------------
71 # 5. A felajánlások alapján több eset lehetséges. Határozza meg,
72 # melyik teljesül! Az idézőjelek közötti szöveget írja a képernyőre!
73 # • „Minden ágyás beültetésére van jelentkező.”
74 # • Ha nincs minden ágyásra jelentkező, de a felajánlásokban
75 # vállalt ágyások számának összege nagyobb vagy egyenlő, mint,
76 # az ágyások száma, akkor:
77 # „Átszervezéssel megoldható a beültetés.”
78 # • Ha kevesebb ágyás beültetésére vállalkoztak, mint amennyi van:
79 # „A beültetés nem oldható meg.”
80 #---------------------------------------------------------------------
81 print('5. feladat')
82 agyas={} # itt is szótár legyen
83 for key in range(1,N+1):
84 agyas[key]=False # szótár feltöltése
85 db=0
86 for v in park.values():
87 kezd=v[0]
88 vege=v[1]
89 db+=vege-kezd+1
90 if kezd<vege: # "normál" felajánlás
91 for key in range(kezd,vege+1):
92 if agyas[key]==False: # ha még nem foglalkoztunk vele...
93 agyas[key]=True # True, ha van rá felajánlás
94 else:
95 db=N-kezd+1+vege # kapu körüli felajánlás
96 for key in range(kezd,N+1):
97 if agyas[key]==False: # mint 92-93. sor a kapuig
98 agyas[key]=True
99 for key in range(1,vege+1): # mint 92-93. sor a kaputól
100 if agyas[key]==False:
101 agyas[key]=True
102
103 true_db=0 # számoljuk meg az agyas szótárban a True értékeket
104 for v in agyas.values():
105 if v:
106 true_db+=1
107
108 if true_db==N:
109 print('Minden ágyás beültetésére van jelentkező.')
110 elif db>=N: # nem minden ágyásra, de elegendő számúra jelentkeztek
111 print('Átszervezéssel megoldható a beültetés.')
112 else:
113 print('A beültetés nem oldható meg.')
114 #---------------------------------------------------------------------
115 # 6. A beültetést a felajánlások sorrendjében végezték el. Ha egy
116 # ágyást valaki már beültetett, akkor más már nem ültetett oda.
117 # A munka eredményét tárolja el a szinek.txt fájlban!
118 # A fájlban soronként az ágyások sorszámának sorrendjében két
119 # értéket, az ágyás színét jelző karaktert és az ültetéshez tartozó
120 # felajánlás sorszámát írja ki. Amelyik ágyás virág nélkül maradt,
121 # színként a # karaktert, a felajánlás sorszámának helyére pedig a
122 # 0-t írja!
123 #---------------------------------------------------------------------
124 print('6. feladat')
125 agyas={} # 5. feladathoz hasonló logika szerint oldjuk meg!
126 for key in range(1,N+1):
127 agyas[key]=['#',0]
128
129 for k,v in park.items():
130 kezd=v[0]
131 vege=v[1]
132 db+=vege-kezd+1
133 if kezd<vege:
134 for key in range(kezd,vege+1):
135 if agyas[key]==['#',0]:
136 agyas[key]=[v[2],k]
137 else:
138 db=N-kezd+1+vege
139 for key in range(kezd,N+1):
140 if agyas[key]==['#',0]:
141 agyas[key]=[v[2],k]
142 for key in range(1,vege+1):
143 if agyas[key]==['#',0]:
144 agyas[key]=[v[2],k]
145
146 fki=open('szinek.txt','w')
147 [print(elem[0],elem[1],file=fki) for elem in agyas.values()]
148 fki.close()
149