Általános leírás
Törekedj arra, hogy szép, áttekinthető kódot írj! Úgy oldd meg a feladatokat, hogy függvényeket használsz a megoldáshoz! A felhasznált függvényekben ne történjen konzolra való kiírás!
Mindegyik feladatban nagyon fontos, hogy bár két inputfájlt kapsz, úgy írd meg a programod, hogy bármilyen, a feladatkiírásnak megfelelő inputfájlpárral működjön!
3.100-SZ3 Szavazás – kieséses választás
Előfeltétel: az SZ1 – Szavazás – csak az első hely számít feladat megoldása. Az ott gyakorolt szavazatszámlálást és rangsorolást ebben a feladatban több fordulóban, a még versenyben lévő jelöltekre alkalmazzuk. A teljes bemeneti leírás és minden választási szabály alább is szerepel.
Az iskola diákönkormányzati elnököt választ. A szavazók minden jelöltet sorrendbe állítanak: első helyre a leginkább támogatott, utolsó helyre a legkevésbé támogatott jelölt kerül. A választás eredményét az alábbi, a feladathoz rögzített szabályok alapján kell meghatároznod.
Bemeneti fájlok
A jeloltek.csv UTF-8 kódolású fájl első sora mezőneveket tartalmaz. Minden további sor egy jelölt egyedi pozitív egész azonosítóját és teljes nevét tartalmazza, pontosvesszővel elválasztva. Az azonosítók nem feltétlenül folytonosak, a sorok sorrendje tetszőleges. Legalább két jelölt van. A nevek nem tartalmaznak pontosvesszőt vagy sortörést; a mezők nincsenek idézőjelezve.
A szavazatok.txt UTF-8 kódolású fájl minden sora egy szavazat. A fájlnak nincs fejlécsora. Egy sorban az összes jelölt azonosítója szerepel pontosvesszővel elválasztva, a szavazó preferenciasorrendjében. Minden jelölt pontosan egyszer szerepel minden szavazaton. Feltételezheted, hogy legalább egy szavazat van, és minden szavazat érvényes. Azonos sorrendet több szavazó is megadhat.
A választás szabályai
Kezdetben minden jelölt versenyben van. Minden fordulóban minden szavazólap a saját preferenciasorrendjében elsőként szereplő, még versenyben lévő jelöltnek ad egy szavazatot. Ha a szavazólap korábbi kedvence már kiesett, a szavazat a sorrendben következő, még versenyben lévő jelöltre kerül.
A még versenyben lévő jelölteket az aktuális szavazatszámuk szerint csökkenően rendezzük; holtversenyben a kisebb azonosítójú jelölt kerül előre. A nulla szavazatot kapó jelöltek is szerepelnek a rangsorban.
Ha valaki az összes szavazat több mint felét megszerezte, ő a győztes, és az eljárás véget ér. Pontosan 50% még nem elég. Ellenkező esetben a rangsor utolsó jelöltje kiesik: ez a legkevesebb szavazatot kapó jelölt, holtverseny esetén közülük a legnagyobb azonosítójú. Egyszerre mindig pontosan egy jelölt esik ki, majd új forduló kezdődik.
Minden szavazólap teljes sorrendet tartalmaz, ezért a szavazatok száma egyik fordulóban sem csökken. Ha már csak egy jelölt marad, minden szavazatot ő kap, így biztosan győz. Az eredeti preferenciasorrendeket ne módosítsd! A kiesett jelölteket külön nyilvántartással kezeld!
Feladatok
Minden részfeladat előtt írd ki a sorszámát!
- Olvasd be a jelölteket és a szavazatokat! Írd ki a jelöltek számát és a leadott szavazatok számát!
- Készíts függvényt, amely egy szavazólap és a versenyben lévő jelöltek alapján visszaadja, kire kerül az adott szavazat!
- Készíts függvényt, amely meghatározza egy forduló szavazatszámait! Rendezéssel állítsd elő a még versenyben lévő jelöltek fenti szabályok szerinti rangsorát!
- Játszd le a választást a győztes megszületéséig! Minden fordulóban írd ki a forduló sorszámát, majd a rendezett listát: a jelöltek azonosítóját, teljes nevét és aktuális szavazatszámát! Ha van győztes, állj meg; különben írd ki a kieső nevét, és folytasd a következő fordulóval!
- A végén írd ki a győztes nevét és a lejátszott fordulók számát!
Példa
A jeloltek.csv tartalma:
Azonosito;Nev
1;Kovács Anna
2;Nagy Bence
3;Tóth Csilla
A hozzá tartozó szavazatok.txt:
1;2;3
1;2;3
1;2;3
2;3;1
2;3;1
3;2;1
3;2;1
A választás menete:
1. forduló
1;Kovács Anna;3
2;Nagy Bence;2
3;Tóth Csilla;2
Kiesik: Tóth Csilla
2. forduló
2;Nagy Bence;4
1;Kovács Anna;3
A győztes: Nagy Bence
A lejátszott fordulók száma: 2
Az első fordulóban senki nem szerzi meg a hét szavazat több mint felét. A két 2 szavazatos jelölt közül a nagyobb azonosítójú Tóth Csilla esik ki. A rá szavazó két szavazólapon Nagy Bence a következő, még versenyben lévő jelölt. Így a második fordulóban Nagy Bence 4 szavazatot kap, és győz.