Kodėl sprendimų įkėlimas šiais metais yra apribotas vien tik sprendimu interaktyviojoje aplinkoje? Dirbti normalioje IDE yra žymiai patogiau. Nebėra galimybės naudotis debugger'iu. Nėra galimybės naudotis C++11 ar C++14. Sprendimai yra apriboti iki tų, kuriuos sugalvojo užuoties sudarinėtojai - dažnai tie sprendimo būdai būna nelabai kokybiški, ne optimaliausi, tačiau kadangi negalima pilnai koreguoti rašomo kodo, būtina užduotį spręsti pagal duotą pradinį kodą. Pats pradinis kodas neretai yra nekokybiškas, nesilaiko priimtų dabartinių C++ standartų ir gerų praktikų. Vertimas sprendėjus rašyti tokį kodą gali būti laikomas jų žalojimu, o ne mokymu...
Keli duoto pradinio kodo nekokybiškumo pavyzdžiai:
* Įtrauktos nenaudojamos bibliotekos
* Naudojama "using namespace std;" (to daryti nerekomenduojama. Niekada, net ir mažose programose. Blogas įprotis)
* Rašomos nenaudingos funkcijos (pvz. užduotyje Heteroliteralai - kai įvestis tėra 2 žodžiai, jai gauti atskiros funkcijos paprastai niekas nerašo)
* Kaip minėta, priverčiama rašyti neoptimalius sprendimus (pvz. užduotyje Heteroliteralai pateikta funkcija Tikrinimas, priimanti string ir char tipo kintamuosius. Implikuojamas sprendimo būdas yra O(N^2) sudėtingumo, tuo tarpu užuotį galima išspręsti ir su O(N) algoritmu)
* Naudojami macros vietoj konstantų ("#define MAXDIM 8" užduotyje "Valdovės")
* Naudojami C-tipo masyvai. Praktiškai visose situacijose juos geriau pakeisti std::vector arba std::array iš standartinės bibliotekos.
* Kai kurios užduotys dėl pateikto pradinio kodo realiai neveiktų. Užduotyje Drugio efektas yra tokia įvesties funkcija:
Ši funkcija yra infinite loop'as. Dėl jos programa amžinai lauktų įvesties. Šis kodas veikia tik jūsų interaktyvioje aplinkoje.
Praeitais metais puikiai susitvarkėte ir su siunčiamais sprendimais. Kodėl šią galimybę šiais metais reikėjo pašalinti? Manau, jog neesu vienintelis, kurį šis pakeitimas nuo Informiko apskritai atbaidys.
Keli duoto pradinio kodo nekokybiškumo pavyzdžiai:
* Įtrauktos nenaudojamos bibliotekos
* Naudojama "using namespace std;" (to daryti nerekomenduojama. Niekada, net ir mažose programose. Blogas įprotis)
* Rašomos nenaudingos funkcijos (pvz. užduotyje Heteroliteralai - kai įvestis tėra 2 žodžiai, jai gauti atskiros funkcijos paprastai niekas nerašo)
* Kaip minėta, priverčiama rašyti neoptimalius sprendimus (pvz. užduotyje Heteroliteralai pateikta funkcija Tikrinimas, priimanti string ir char tipo kintamuosius. Implikuojamas sprendimo būdas yra O(N^2) sudėtingumo, tuo tarpu užuotį galima išspręsti ir su O(N) algoritmu)
* Naudojami macros vietoj konstantų ("#define MAXDIM 8" užduotyje "Valdovės")
* Naudojami C-tipo masyvai. Praktiškai visose situacijose juos geriau pakeisti std::vector arba std::array iš standartinės bibliotekos.
* Kai kurios užduotys dėl pateikto pradinio kodo realiai neveiktų. Užduotyje Drugio efektas yra tokia įvesties funkcija:
void Skaityti(string zodziai[], int &zodziuSkaicius) { while(cin >> zodziai[zodziuSkaicius ++]){} }
Ši funkcija yra infinite loop'as. Dėl jos programa amžinai lauktų įvesties. Šis kodas veikia tik jūsų interaktyvioje aplinkoje.
Praeitais metais puikiai susitvarkėte ir su siunčiamais sprendimais. Kodėl šią galimybę šiais metais reikėjo pašalinti? Manau, jog neesu vienintelis, kurį šis pakeitimas nuo Informiko apskritai atbaidys.