A Nagy Királyi Zsibvásár

Kategória: Python - emelt szint

Feladat leírása

A Nagy Királyi Zsibvásár illusztráció

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:

  1. Bárki beadhat igénylést egy szakaszra (mettől meddig akar árusítani).

  2. Megadják, hogy mennyit hajlandóak fizetni "lépésenként" (ez az adó).

  3. 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.

  4. 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:

200
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. 1.

  2. 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).

  3. 2.

  4. 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)!

  5. 3.

  6. 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!

  7. 4.

  8. 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!)

  9. 5.

  10. 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.

  11. 6.

  12. 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."

  13. 7.

  14. 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).

  15. 8.

  16. 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!

  17. 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_neve

    • a) példa


Forrásfájlok