Az I. 397. feladat (2016. március) |
I. 397. (É.) Egy 32 sakkozó között zajló versenyt a következők szerint rendeztek meg a szervezők. Az első fordulóban csoportokat hoztak létre, majd a csoportokon belül körmérkőzéseket játszottak egymással a játékosok. A versenyzőknek kezdetben 100 pontjuk volt. A játszmák győztese minden mérkőzés után megkapta az ellenfél pontjainak 20-ad részét, és pontszámát fölfelé egészre kerekítették. A vesztes pontjai nem változtak. Döntetlen eredmény esetén a játszmát újra kellett játszani.
Az első forduló után kialakult pontszámok és a magyar versenyzők nevei megtalálhatók a sakk.txt, honlapunkról letölthető szöveges állományban. A fájl minden sora egy versenyző adatait tartalmazza, a pontszám, a vezeték és a keresztnév vagy keresztnevek egymástól egy-egy szóközzel vannak elválasztva. A fájl csak ékezetek nélküli karaktereket tartalmaz, nincsenek benne fölösleges sorok vagy szóközök, a versenyzők neve előtt nincs előtag (pl. Dr. vagy ifj.). Egy rövid részlet a fájlból:
A második fordulóban egyenes kieséssel folytatták a versenyt a játékosok. A sakkozókat pontszám szerint csökkenő sorrendbe állították, és sorrendben az első játékos játszott a legutolsóval, a második az utolsó előttivel, és így tovább. Az azonos pontszámú versenyzőket nevük szerint ABC rendbe sorolták be. Az első körben az így kialakított párosok egy játszmát játszottak egymással. A győztesek a fentiek alapján növelték pontjaikat, a vesztesek kiestek a további játékból. Ezután ismét elvégezték a sorba rendezést, és a második körben a még játékban lévő játékosok játszottak egymással az előbbi módon. Minden további körben ugyanígy történt a párosok kiválasztása és a pontok számítása, egészen a döntő játszmáig.
Készítsünk programot i397 néven, amely megoldja a következő feladatokat. Az egyes feladatok megoldása előtt írjuk ki a feladat sorszámát a képernyőre, pl. ,,3. feladat:''. A nevek kiírásakor minden feladatban a keresztnevek helyett csak azok első betűjét és egy pontot jelenítsünk meg, figyelve a magyar nyelvben használt kettős betűkre.
1. Olvassuk be a sakk.txt állományt, és tároljuk el az adatokat.
2. Írjuk ki a képernyőre a versenyzők adatait a beolvasás szerinti sorrendben a következő formában:
3. A második fordulóban a párosok közötti játszmákat szimuláljuk úgy, hogy a játékosnak az aktuális pontszámával arányos esélye legyen a győzelemre. Legyen az egyik versenyző jelenlegi pontja \(\displaystyle A\), a másik versenyzőé \(\displaystyle B\). Generáljunk egy véletlen egész számot 1 és \(\displaystyle A+B\) között. Az első versenyző a győztes, ha a véletlenszám 1 és \(\displaystyle A\) közötti, és a másik versenyző a győztes, ha \(\displaystyle A+1\) és \(\displaystyle A+B\) közötti. Készítsünk ElsoNyer néven logikai értéket visszaadó függvényt, amelynek két egész paramétere két játékos pontszáma. A függvény szimulálja a játszmát véletlenszám generálásával, majd adjon vissza igaz értéket, ha az első játékos nyert, és hamis értéket, ha a második.
4. Játsszuk le a második forduló első körét az előbb elkészített függvény segítségével. Írjuk a képernyőre a sakkozók kör végén érvényes adatait. Egy-egy sorban az egymás ellen játszók szerepeljenek a 2. feladat szerinti formában, három vonallal (---) elválasztva.
5. Adjuk meg, hogy melyik versenyző és ki ellen szerezte a legtöbb pontot a második forduló első körében. A választ foglaljuk mondatba, pl. ,,Kiss-Kerekes E. (396) szerezte a legtöbb pontot (18) Kovacs A. Gy. (345) ellen''.
6. Játsszuk végig a második forduló második körét is, és írjuk ki a kor2.txt állományba a kör nyolc játszmája után érvényes eredményeket és a párosítást a 4. feladatban leírtaknak megfelelően.
7. Soroljuk föl azokat a második körben kiesett sakkozókat, akik több pontot szereztek, mint a legkisebb pontszámot szerző továbbjutó, és írjuk a képernyőre nevük rövidített alakját egymástól vesszővel elválasztva.
8. Játsszuk végig a további köröket is, és írjuk a képernyőre a döntőben részt vevő két sakkozó adatait az utolsó kör előtt, illetve a kör után.
Beküldendő egy tömörített i397.zip állományban a program forráskódja, valamint a program rövid dokumentációja, amely a fentieken túl megadja, hogy a forrás mely fejlesztői környezetben fordítható.
A megoldáshoz fölhasználható bemeneti állomány: sakk.txt.
(10 pont)
A beküldési határidő 2016. április 11-én LEJÁRT.
Mintamegoldásként közöljük Nagy Ábel, 11. évfolyamos budapesti versenyző C#-ban készült munkáját: i397.cs.
Statisztika:
6 dolgozat érkezett. 10 pontot kapott: Nagy Ábel, Szakali Benedek. 9 pontot kapott: Olexó Gergely, Rittgasszer Ákos. 8 pontot kapott: 1 versenyző. 7 pontot kapott: 1 versenyző.
A KöMaL 2016. márciusi informatika feladatai