Regionális Programozó Csapatverseny Debrecen, 2012. november 25.
DEIK Regionális Programozó Csapatverseny Versenyszabályzat – 2012 I. Nevezés 1. A régió iskoláiból intézményenként két csapat nevezési lehetősége biztosított. Amennyiben egy iskolából kettőnél több csapat is regisztrációval jelzi nevezési szándékát, akkor az időrendben első két nevezés számára pozitív visszaigazolást küld a versenybizottság. Az iskolából érkező további nevezésekről a versenybizottság dönt, s a döntésről legkésőbb a jelentkezési határidő végét követő második munkanapon tájékoztatja az érintett csapatokat. A régión kívüli iskolákból érkező nevezések esetleges elfogadásáról a versenybizottság egyedi elbírálás alapján dönt. 2. A versenyre kizárólag a http://www.inf.unideb.hu/progverseny/regisztracio oldalon megadott regisztrációs lap kitöltésével és elküldésével lehet nevezni. A regisztrációs lapot a csapatot képviselő személy (pl. felkészítő tanár) tölti ki, benevezve a legfeljebb három csapattagot. Egy versenyző személy csak egy csapat tagjaként nevezhető. 3. Az elküldött regisztrációs lapról azonnal e-mail visszajelzést kap a csapatot képviselő személy, de ez nem jelenti a regisztráció elfogadását. A regisztráció elfogadását, s ezzel együtt a versenyen való részvételi lehetőséget a versenybizottság a nevezés átvizsgálása után e-mailben visszaigazolja a csapatot képviselő személynek és a csapat tagjainak (pozitív visszaigazolás), s ez a verseny honlapján is közzétételre kerül. 4. Pozitív visszaigazolás nélkül a csapatok nem vehetnek részt a versenyen. 5. A részvételi adminisztrációs díjat (más néven nevezési díjat; 1000,- Ft/csapat) a csapat regisztrációja után, a verseny szervezői által történt pozitív visszaigazolást követően a következő számlaszámra kérjük átutalni: Jogosult: Új Évezred Informatika Fejlesztési Alapítvány Erste Bank Hungary Zrt. Számlaszám: 11625009-07975400-25000001 Az átutalás megjegyzés rovatába az „Adminisztrációs díj XYZ” szöveget kell írni, ahol XYZ a csapat neve. Az adminisztrációs díjra vonatkozó számlaigényt és a számlázási adatokat a
[email protected] e-mail címre kérjük elküldeni (a csapatnév feltüntetésével) legkésőbb 2012. november 20-ig. 6. A csapatok adminisztrációs díjának legkésőbb 2012. november 20-ig meg kell érkezni az előző pontban megadott számlaszámra. Ha az adminisztrációs díj a megadott határidőig nem érkezik meg, a csapat nem indulhat a versenyen.
Szponzorok:
1. Oldal
Regionális Programozó Csapatverseny Debrecen, 2012. november 25.
II. A verseny lebonyolításának szabályai 1. A csapatok tagjainak a verseny megkezdésekor és a verseny teljes ideje alatt személyesen kell megjelenniük a verseny helyszínén, s személyazonosságukat diákigazolvánnyal, vagy annak hiányában személyazonosságuk igazolására alkalmas egyéb igazolvánnyal kell igazolniuk. Diákigazolvány hiányában a versenybizottság igazolást kérhet a versenyző adott iskolában érvényes tanulói vagy hallgatói jogviszonyáról. 2. Egy versenyző személy csak egy csapat tagjaként versenyezhet. Ha egy csapattag nem tud megjelenni a versenyen, helyettesítésére nincs lehetőség. 3. A csapatokat kísérő személyek (felkészítő tanárok, hozzátartozók stb.) a verseny teljes ideje alatt a verseny helyszínét biztosító épületen belül csak a számukra kijelölt részében, a csapatoktól elkülönített termekben tartózkodhatnak. A verseny ideje alatt a kísérők és a csapatok versenyzői között semmilyen kommunikáció nem megengedett. Ezen tilalom megsértése az adott csapatnak a versenyből való kizárását eredményezheti, s ebben az esetben a csapatnak haladéktalanul el kell hagynia a verseny helyszínéül szolgáló épületet. 4. Az első kategóriában versenyző csapatok esetében elvárt egy kísérő, a versenyzőkért felelős felnőtt személy jelenléte vagy elérhetősége a verseny ideje alatt. 5. A verseny hivatalos nyelve az első kategóriában részt vevők számára a magyar, míg a második kategóriában a magyar és az angol. Minden írott és nyomtatott anyagot a kategória hivatalos nyelvén kapnak meg a versenyzők (a második kategóriában lehetnek csak magyar, illetve csak angol nyelven kiírt feladatok is). A feladatok megoldásának ideje alatt a verseny szervezői és a versenyzők közötti kommunikáció is a kategória hivatalos nyelvén zajlik. A mindkét kategóriában közös tájékoztatók (pl. a verseny elején az eligazítás, a verseny végén a feladatok megoldásainak ismertetése, valamint az eredményhirdetés) magyar nyelven hangzanak el. 6. A programozó verseny időtartama öt óra, de a versenybizottság jogosult előre nem látható akadályok bekövetkezése esetén a verseny időtartamának a megváltoztatására. 7. A verseny során minden csapat egy darab, a versenybizottság által kijelölt IBM PC kompatibilis számítógépet használhat a feladatok megoldására és a megoldások beküldésére. A számítógép konfigurációja magában foglal egy billentyűzetet, egy egeret és egy színes monitort. A telepített szoftverekkel kapcsolatban az „A” melléklet tartalmaz tájékoztatást. 8. A versenyzők a verseny közben kizárólag saját csapatuk tagjaival, a versenybizottság tagjaival, illetve a versenybizottság által kijelölt személyekkel kommunikálhatnak. A rendszert felügyelő személyzet tanácsokat adhat a versenyzőknek olyan rendszerspecifikus problémákkal kapcsolatban, mint például az operációs rendszer hibaüzenetei. A csapatok segítséget kérhetnek a „B” mellékletben megadott fordítási opciók beállításához, de az opciók beállításáért a csapat a felelős. 9. A versenyzők a feladatokban előforduló nem egyértelmű, félreérthető megfogalmazásokkal, illetve hibásnak vélt szövegrészekkel kapcsolatban kérdéseket tehetnek fel a versenybizottságnak. Ha a versenybizottság megállapítja a többféle lehetséges értelmezés vagy a hiba tényét, pontosítja a feladat szövegét, és erről értesíti az összes versenyzőt. 10. A verseny hálózati környezetben zajlik. A hálózatot csak a megoldások beküldésére, a feladatokkal kapcsolatos kérdések, észrevételek közlésére és a versennyel kapcsolatos különféle listák lekérdezésére szabad használni a szervezők által közzétett módokon. A hálózat használatának
Szponzorok:
2. Oldal
Regionális Programozó Csapatverseny Debrecen, 2012. november 25. bármilyen más módja szigorúan tilos és a versenyből történő azonnali kizárást vonja maga után, ebben az esetben a csapatnak a verseny helyszínéül szolgáló épületet is el kell hagynia. 11. A versenybizottság kizárhat egy csapatot a versenyből minden olyan tevékenységért, ami veszélyezteti a versenyt. Ilyen például a hosszabbító kábelek eltávolítása, a verseny (szoftveres vagy hardveres) környezetének a jogosulatlan módosítása, a tiltott hálózati tevékenység vagy éppen a másokat zavaró viselkedés. 12. Kizárólag a versenybizottság a felelős az előre nem látható szituációkban hozott döntésekért és ezen döntések végrehajtásáért.
III. Segédeszközök használata 1. A versenyzők a verseny alatt használhatják a magukkal hozott írott és nyomtatott forrásanyagokat (például könyveket, jegyzeteket és papíron rendelkezésre álló programkódrészleteket). A használható papíralapú segédeszközök mennyiségére vonatkozóan a versenyhelyszín fizikai kapacitásának korlátait figyelembe kell venni. 2. A versenyzők a verseny alatt nem használhatnak semmilyen elektronikus formában tárolt vagy hordozott segédanyagot (pl. e-bookot, mobiltelefont, számológépet, a versenybizottság által kijelölttől különböző számítógépet, pendrive-ot vagy a versenybizottság által nem engedélyezett szoftvert). A versenyzők a verseny alatt nem használhatnak semmilyen elektronikus kommunikációs segédeszközt (pl. rádiót, mobiltelefont, PDA-t). A nem megengedett segédeszköz-használat a versenyből való azonnali kizárással jár, s a csapatnak haladéktalanul el kell hagynia a verseny helyszínéül szolgáló épületet.
IV. Feladatok és beküldésük 1. A versenyen minimum hat feladat kerül kitűzésre. A feladatok lehetőség szerint függetlenek konkrét alkalmazási területek részletes ismeretétől, illetve konkrét programozási nyelvtől. A feladatok témakörei felölelhetik pl. a keresések, a rendezések, a sztringkezelés, az aritmetika és algebra, a kombinatorika, a visszalépéses keresés, a gráfalgoritmusok, a dinamikus programozás, valamint a geometria területeit. A versenyre pozitív visszaigazolással rendelkező nevezett csapatok a verseny honlapján keresztül letölthetnek mintafeladatokat, illetve ezen feladatokra vonatkozó megoldások beküldésével tesztelhetik a feladatok automatikus értékelését végző rendszert. 2. A versenyen használható programozási nyelvekről, fordítói beállításokról és a versenyfeladatok megoldására vonatkozó technikai specifikációkról (pl. forráskód maximális mérete) a „B” melléklet ad tájékoztatást. 3. A feladatokhoz elkészített megoldások forráskódját a csapatok webböngésző segítségével egy megadott weboldalon keresztül juttatják el a versenybizottsághoz (ezt nevezzük beküldésnek). Minden beküldés kiértékelésre kerül, s a versenybizottság szubjektivitástól mentes értékelést biztosító automatikus értékelő eljárással dönt, hogy elfogadja vagy visszautasítja azt. A beküldő csapat minden esetben rövid időn belül értesül a versenybizottság döntéséről. 4. Elfogadott beküldés esetén kiszámításra kerül a feladat megoldására felhasznált idő (lásd V. pont), s a kiszámított felhasznált időt a beküldő csapat az elfogadó jelzéssel együtt megkapja. 5. A visszautasított beküldésekre a versenybizottság válasza a következők valamelyike lehet: „Fordítási hiba” – A programot a „B” mellékletben megadott opciókkal nem sikerült lefordítani.
Szponzorok:
3. Oldal
Regionális Programozó Csapatverseny Debrecen, 2012. november 25. „Futási hiba” – A program bizonyos input adatok esetén futási hibával (vagy nem zéró visszatérési értékkel) leállt. „Időtúllépés” – A program futása bizonyos input adatok esetén a meghatározott futási idő maximumot túllépte. „Hibás válasz” – A program bizonyos input adatokra helytelen eredményt adott. „Versenyszabályok megsértése” – A program a „B” mellékletben specifikált valamely feltételt megsértette. „Részben megoldott” – A program a tesztesetek legalább 60 százalékában helyes eredményt adott, de bizonyos input adatokra valamilyen hibát eredményezett. A „C” melléklet tartalmaz néhány programozási javaslatot a fordítási és futási hibák elkerülésére, illetve a programok futásának optimalizálására. 6. A csapatok a versennyel, illetve a beküldések értékelésével kapcsolatos kérdéseiket vagy reklamációikat a verseny végéig jelezhetik a versenybizottság felé. Amennyiben a csapatnak a verseny végén még elbírálás alatt álló beküldése van, akkor az arra kapott értékelésre vonatkozó esetleges reklamációt az értékelés megérkezése után azonnal meg kell tenni. A versenybizottság a hozzá érkező kérdéseket és reklamációkat köteles megvizsgálni, megválaszolni és a csapattal történt egyeztetés után lezárni.
V. A verseny értékelése, a sorrend megállapítása 1. Egy csapat akkor oldott meg egy feladatot, ha a versenybizottság elfogadja a feladatra vonatkozó beküldést. Kizárólag a versenybizottság jogosult egy beküldés elfogadására vagy visszautasítására. A versenybizottság által elfogadott beküldést nevezzük a feladat teljes körű megoldásának. 2. A csapatok rangsorolása a következőképpen történik: A. A csapatokat a teljes körűen megoldott feladatok száma szerint rangsoroljuk (a több teljes körű megoldás jelenti a jobb eredményt). B. Ha két (vagy több) csapat az „A” pont szerinti rangsorban azonos eredményt ér el, akkor őket a részben megoldott feladatok száma szerint rangsoroljuk (a több részleges megoldás jelenti a jobb eredményt). C. Ha két (vagy több) csapat az „A” és „B” pont szerinti rangsorban azonos eredményt ér el, akkor őket a teljes körűen megoldott feladatok megoldásának összideje alapján rangsoroljuk (a kisebb összidő jelenti a jobb eredményt). Az összidő (más értelmezés szerint: büntetőidő) a teljes körűen megoldott feladatokhoz felhasznált idők összege (percekben számolva). Egy teljes körűen megoldott feladathoz felhasznált időt úgy számíthatjuk ki, hogy a verseny elejétől az adott feladatra benyújtott első elfogadott beküldés idejéig eltelt időhöz hozzáadunk annyiszor 20 percet, ahány visszautasított beküldése (sikertelen vagy nem teljes körű megoldása) volt a csapatnak erre a feladatra az elfogadott megoldás beküldése előtt, tekintet nélkül ezen beküldések időpontjaira. Azoknál a feladatoknál, amelyeket a csapatnak nem sikerült teljes körűen megoldania, nem számolunk felhasznált időt. D. Ha két (vagy több) csapat az „A”, „B” és „C” pont szerinti rangsorban azonos eredményt ér el, akkor őket legelső teljes körű megoldásuk kiértékelő rendszerben regisztrált beküldési sorrendje alapján rangsoroljuk (a korábbi beküldés jelenti a jobb eredményt).
Szponzorok:
4. Oldal
Regionális Programozó Csapatverseny Debrecen, 2012. november 25. E. Ha két (vagy több) csapat az „A”, „B”, „C” és „D” pont szerinti rangsorban azonos eredményt ér el, akkor őket legelső részleges megoldásuk kiértékelő rendszerben regisztrált beküldési sorrendje alapján rangsoroljuk (a korábbi beküldés jelenti a jobb eredményt). F. Ha egy csapat sem teljes körű, sem részleges megoldást nem ért el egyetlen feladatra vonatkozóan sem, akkor a csapat teljesítményre vonatkozó díjazásban (pl. fődíjban, megyei első hely díjban) nem részesülhet. Több ilyen csapat esetén a versenybizottság közöttük holtversenyt hirdet ki. 3. A verseny időtartamának letelte után a versenybizottság befejezi az esetlegesen folyamatban lévő beküldések értékelését; megválaszolja és lezárja az esetlegesen folyamatban lévő kérdéseket, illetve reklamációkat, s ezzel a versenyt befejezettnek nyilvánítja. A verseny befejezése után a csapatok már semmilyen kifogással, illetve reklamációval nem élhetnek. 4. A verseny befejezése után a versenybizottság kihirdeti a kategóriánkénti végeredményeket. A csapatok eredménye a verseny honlapján nyilvános formában megjelenik.
Szponzorok:
5. Oldal
Regionális Programozó Csapatverseny Debrecen, 2012. november 25. „A” melléklet Programozási környezet A csapatok számára rendelkezésre álló munkaállomásokon Windows és Linux operációs rendszerek, valamint az alábbi szoftverek lesznek elérhetők: Windows alatt: 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
32 bites Windows XP Professional Service Pack 3 operációs rendszer Internet Explorer és Mozilla Firefox böngészők Far Manager 2.0 és Total Commander 8.01 fájlkezelők Notepad++ 6.1.6 szövegszerkesztő Java SE 7 Update 6 MinGW gcc és g++ 4.6.2 Netbeans 7.2 (Java és C/C++ támogatással, MinGW C/C++ fordítóval) Eclipse 4.2 Juno (Java és C/C++ támogatással) Visual Studio 2010 Professional (Java, C/C++ és C# támogatással, .NET 4.0 keretrendszerrel) Code::Blocks 10.05 (C/C++ támogatással) Free Pascal 2.6.0
Linux alatt: 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
64 bites Ubuntu 12.0.4 Linux operációs rendszer Gnome grafikus felhasználói felület Mozilla Firefox böngésző Midnight Commander fájlkezelő mcedit, joe, kate, xemacs szövegszerkesztők xwpe IDE gdb nyomkövető ddd grafikus felülettel gcc és g++ 4.6.3 Netbeans 7.2 (Java és C/C++ támogatással) Eclipse 4.2 Juno (Java és C/C++ támogatással) Code::Blocks 10.05 (C/C++ támogatással) Free Pascal 2.6.0
Az egyes nyelvek dokumentációi (C standard könyvtár, C++ STL, Java SE API, .NET keretrendszer, Free Pascal) a verseny közben elérhetők lesznek.
Szponzorok:
6. Oldal
Regionális Programozó Csapatverseny Debrecen, 2012. november 25. „B” melléklet A versenyen használható programozási nyelvekről, fordítóprogramokról és a forráskódok lefordításához használt fordítási opciókról, valamint technikai specifikációkról 1. A verseny programozási nyelvei: Java, C, C++, C# és Pascal. 2. Egy feladat megoldását egyetlen, a forrásnyelven megírt kódot tartalmazó állományban (továbbiakban forráskód) kell beküldeni. A beküldött állomány nevének az alábbi kiterjesztések egyikével kell rendelkeznie: Java nyelvű program esetén: .java C nyelvű program esetén: .c C++ nyelvű program esetén: .cpp C# nyelvű program esetén: .cs Pascal nyelvű program esetén: .pas 3. A versenyzők által beküldött forráskódok az alábbi parancsokkal lesznek lefordítva: Java: javac
C: gcc -std=c89 –pedantic-errors -lm -O3
C++: g++ -std=c++98 –pedantic-errors -lm -fexceptions -O3
C#: csc /optimize
Pascal: fpc -XS
A versenybizottság által használt fordítóprogramok verziója megegyezik a versenyzők részére biztosítottakéval (lásd az „A” mellékletet). 4. A beküldött forráskód mérete nem haladhatja meg a 40 KB-ot. 5. A beküldés forráskódjából lefordított futtatható állomány mérete nem haladhatja meg az 5 MB-ot. 6. Minden programnak 512 MB memória áll rendelkezésére a futása során. 7. A feladat megoldását végző programnak a befejeződésekor zéró (0) visszatérési értéket kell adnia az operációs rendszer felé (lásd a „C” mellékletet), ellenkező esetben „Futási hiba” értékelést kap a beküldés. 8. A beküldött forráskód nem tartalmazhat olyan kódrészleteket, amelyek a standard input és standard output csatornákon kívül más állományokat használnak, egynél több szálat vagy folyamatot kezelnek, hálózati szolgáltatásokat vesznek igénybe.
Szponzorok:
7. Oldal
Regionális Programozó Csapatverseny Debrecen, 2012. november 25. „C” melléklet Programozási javaslatok a fordítási és futási hibák elkerülésére, illetve a programok futásának optimalizálására A programkódokat beküldés előtt mindenképpen érdemes a „B” mellékletben megadott fordítási opciókkal lefordítani, elkerülendő a versenybizottság „Fordítási hiba” üzenetét. A versenybizottság kiértékelő alkalmazásai figyelik a tesztelt beküldés által szolgáltatott visszatérési értéket. Ha ez az érték 0-tól különböző, a beküldés értékelése „Futási hiba” lesz. Egy program az operációs rendszer felé a következő módon tud 0 visszatérési értéket szolgáltatni: Java nyelven: System.exit(0); metódushívással a program tetszőleges pontján, ahol végrehajtható utasítás állhat. C, C++ nyelven: return 0; utasítással a main() függvényben, illetve exit(0); függvényhívással a program tetszőleges pontján, ahol végrehajtható utasítás állhat. C# nyelven: Environment.Exit(0); metódushívással a program tetszőleges pontján, ahol végrehajtható utasítás állhat. Pascal nyelven: Halt(0); eljáráshívással a program tetszőleges pontján, ahol végrehajtható utasítás állhat. A Java, C# és Pascal programokat nem kötelező a megadott utasításokkal befejezni, mivel azok – normál befejeződés esetén – amúgy is 0-val térnek vissza. A C++ nyelven programozóknak javasoljuk, hogy a standard bemenetről történő adatbeolvasásra és a standard kimenetre történő adatkiíratásra a program futásának optimalizálása érdekében a C++ nyelvben megszokott cin és cout streamek helyett használják a C nyelv standard könyvtári függvényeit, a scanf() és printf() függvényeket! A cin és cout streameket használó programok kellően nagyméretű adathalmazok esetén mérhetően lassabban futnak! A versenybizottságnak a beküldések teszteléséhez használt adatai a feladatokban leírt input (bemeneti) specifikációknak megfelelőek lesznek. A beküldéseknek csak a specifikációban megadott formátumú adatokat kell feldolgozniuk. Nem szükséges a beküldött programban ezek helyességét ellenőrizni, ez ugyanis lassíthatja a program futását. A program által a standard kimenetre küldött adatok formátumának meg kell felelnie a probléma output (kimeneti) specifikációjában leírtaknak. A versenybizottság kiértékelő alkalmazásai nem fogadják el helyesnek az olyan kimeneti eredményeket, amelyeknek a végén tetszőleges számú (üres) sorral több szerepel, mint az elvárt helyes kimenet, vagy éppen az eredmény valamely sora a kívánt helyes karaktersorozat után további szóköz karaktereket tartalmaz. Különösen ellenjavallt a beküldött programban olyan, a felhasználónak szóló, ám a feladat kimeneti specifikációjában nem szereplő üzeneteknek a standard kimenetre történő kiíratása, mint például a „Kérem a következő egész számot:” vagy az „Adja meg n és m értékét!” üzenetek. Ezek ugyanis a begépelt formában jelennek meg a standard kimeneten, és emiatt nagy valószínűséggel nem fognak megfelelni a feladat kimeneti specifikációjában leírtaknak.
Szponzorok:
8. Oldal
Regionális Programozó Csapatverseny Debrecen, 2012. november 25.
A programnak csak addig kell tárolnia a beolvasott bemeneti adatokat, ameddig azok feldolgozásra nem kerülnek; legtöbbször felesleges előre beolvasni az összes bemeneti adatot, és csak utána feldolgozni azokat. Legtöbbször ugyancsak felesleges a már kiszámított részeredményeket a memóriában tárolni, ha a további számításokhoz már nincsen szükség rájuk. Ha a feladatnak a standard inputról kell adatokat beolvasnia, akkor a megoldást célszerű úgy tesztelni, hogy a tesztelésre szánt bemeneti adatokat előzetesen elmentjük egy szöveges állományba (teszt.in), majd egy parancsablakban kiadjuk a program < teszt.in > teszt.out
parancsot. A teszt.in állomány létrehozásával a tesztelendő adatok ismételt begépelésétől kímélhetjük meg magunkat abban azt esetben, ha a program nem az elvárt eredményeket szolgáltatja valamely tesztesetre. A program lefutása után a kimeneti adatokat a teszt.out állományban találjuk.
Szponzorok:
9. Oldal