A Nagy Királyi Zsibvásár
Kategória: Python - emelt szint
Feladat leírása
A király kihirdette a Nagy Éves Vásárt a főváros egyetlen, ámde baromi hosszú, egyenes főutcáján. A helyekért a különböző céhek (kovácsok, pékek, alkimisták, stb.) versenyeznek. A főutca hosszát "királyi lépésben" mérik, és 1-től kezdődik a számozás.
A szabályok kegyetlenek, tiszta kapitalizmus a középkorban:
-
Bárki beadhat igénylést egy szakaszra (mettől meddig akar árusítani).
-
Megadják, hogy mennyit hajlandóak fizetni "lépésenként" (ez az adó).
-
A Dominancia Elve: Ha két árus ugyanazt a területet (vagy annak egy részét) akarja, akkor az a szakasz azé lesz, aki többet fizet érte.
-
Ha az ajánlott adó pont ugyanannyi, akkor azé a terület, aki előbb adta be az igénylést (aki előrébb van a listában).
Neked, a királyi főkönyvelő (vagyis a Royal Data Scientist) tanoncának kell rendet vágnod a káoszban, és megmondani, végül ki hol árulhat, és mennyi arany folyik be a kincstárba.
A piac.txt állomány szerkezete:
-
Az első sorban az utca hossza van (maximum 5000 lépés).
-
A többi sor az igényléseket tartalmazza. Egy sorban négy adat van szóközökkel elválasztva:
-
Kezdet: (ahonnan a stand indulna)
-
Vég: (ameddig tartana)
-
Céh neve: (egy szó, pl.
Pekek,Kovacsok,Varazslok) -
Adó: (egész szám, arany/lépés, 1-100 között)
-
Példa bemenet:
10 50 Pekek 12
30 40 Kovacsok 25
35 60 Alkimistak 25
...
Magyarázat:
-
A Pékek lefoglalnák a 10-50 szakaszt 12 aranyért.
-
A Kovácsok bejönnek a 30-40 szakaszra 25 aranyért. Mivel 25 > 12, a 30-40 részen "felülírják" a Pékeket.
-
Az Alkimisták a 35-60-ra jönnek szintén 25-ért. A 35-40 részen ütköznek a Kovácsokkal. Mivel az adó egyenlő (25), de a Kovácsok előbb voltak a listában, a Kovácsok maradnak a 35-40-en. A 41-60 részen viszont az Alkimisták nyernek (ott eddig a Pékek voltak 12-vel, vagy senki).
Készíts Python programot vasar néven a feladatok megoldására!
Részfeladatok
1.
Beolvasás és tárolás: Olvasd be a
piac.txtállományt! Tárold el az igényléseket úgy, hogy később tudd, ki mikor érkezett, és mennyiért bérelne. (Tipp: Érdemes lehet sorszámot is rendelni hozzájuk a "beérkezési sorrend" miatt).2.
Gyorsjelentés: Írd ki a képernyőre, hány igénylés érkezett összesen, és mi volt a valaha felajánlott legmagasabb adó (négyzetméterár)!
3.
A "Gazdag" Céh: Keresd meg azt az igénylést, amelyik a legnagyobb teljes bevételt ígérte a királynak (szakasz hossza * felajánlott adó), függetlenül attól, hogy végül kap-e helyet vagy sem. Írd ki a céh nevét és ezt az összeget!
4.
Helyszíni szemle (Interaktív): Kérj be a felhasználótól egy koordinátát (lépés számot)!
a) Írd ki, hányan pályáztak összesen erre a konkrét pontra!
b) Írd ki annak a Céhnek a nevét, aki végül megnyerte ezt a pontot (akié a terület lesz)! Ha senkié, írd ki: "Üres terület". (Figyelj a szabályokra: nagyobb adó nyer; egyenlőségnél a gyorsabb nyer!)
5.
A Térkép elkészítése (Logikai mag): Szimuláld le a teljes utcát! Minden egyes "lépésről" (1-től L-ig) el kell tudnod dönteni, hogy végül kié lett. Tipp: Csinálj egy listát, ami az utca hosszát reprezentálja. Minden eleme tárolja, hogy épp ki a nyertes és mennyi az adó. Menj végig az igényléseken, és "fesd át" a listát ott, ahol az új ajánlat jobb, mint ami épp ott van.
6.
A Nagy Vesztesek: Keress olyan céheket, akik beadtak igénylést, de a nagy versenyben végül egyetlen lépésnyi helyet sem kaptak (teljesen lefedték őket a gazdagabbak). Írd ki a nevüket! Ha nincs ilyen, írd ki: "Mindenkinek jutott valami."
7.
Bevételi összesítés: Mennyi a Királyi Kincstár végleges, teljes bevétele a vásárból? (Csak a ténylegesen megvalósult foglalások után járó pénzt számold! Tehát ha a Pékeket felülírta a Kovács, arra a szakaszra a Kovács adóját kell számolni).
8.
A "Sétáló Nemes" problémája: Egy nemes végigsétál az utca elejétől a végéig. Kíváncsi, hogy milyen változatos a felhozatal. Számold meg, hányszor váltják egymást a céhek a végleges elrendezésben! (Például: ha a sorrend Pékek -> Kovácsok -> Pékek -> Üres -> Pékek, az 4 váltásnak számít). Írd ki a váltások számát!
9.
Végleges lista (
zaras.txt): Generálj egy fájlt, ami a végleges állapotot tükrözi, de tömörítve! Nem kell minden métert kiírni. Csak a szakaszokat írd ki, ahol ugyanaz a bérlő. Formátum:Kezdet - Vég : Céh_nevea) példa
