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