Jak řešit úlohy?

Začni nejprve tím, že se zaregistruješ na našich webových stránkách. Potom si stáhni zadání úloh, vyřeš je a své řešení nám odevzdej. Jak odevzdávat tu či onu úlohu záleží na jejím typu. O který typ úlohy se jedná je uvedeno u zadání úlohy. Celkem se pak ve FIKSu můžeš setkat se třemi typy úloh:

Úlohy typu: Rozmysli, popiš a naprogramuj!

S těmito úlohami se během svého pobytu tady setkáš nejčastěji. U každé úlohy tohoto typu se odevzdává jak slovní popis algoritmu (s odhadem asymptotické složitosti), tak implementace problému v tebou zvoleném jazyce (jakýkoliv vyšší programovací jazyk dle tvé volby, například C, C++, Java, Pascal, Python, apod.). Odevzdává se zde na stránkách nahráním příslušných souborů na server. Jako směrodatné řešení se bere to, které jsi odeslal jako poslední před vypršením limitu na odevzdávání úloh daného kola.

Slovní popis algoritmu odevzdávej ať už v elektronické, či v naskenované (čitelné) podobě, ve formátu PDF. Měl by obsahovat tvůj popis algoritmu a odhad jeho asymptotické složitosti, případně zdůvodnění správnosti algoritmu, pokud to není jasné už z popisu. Slovní popis by měl především vystihnout podstatu fungování Tvého algoritmu a nikoli tedy komentovat detaily programu. Pokud tápeš v tom, co to ta složitost vlastně je, pročti si příslušný textík v záložce studijní materiály (neboj, není to tak složité, jak se dle názvu může zdát). Zároveň se tam můžeš podívat na zadání a vzorové řešení jedné úlohy.

Z programu nám pošli pouze zdrojový kód, tedy žádné binárky. Pokud je třeba pro kompilaci použít jiný než standardní postup, napiš nám ho do poznámek k odevzdání. Nejdůležitější je pak fakt, že Tvému programu budou vstupní data předkládána na standardním vstupu, což znamená, že nemusíš řešit otevírání souborů a podobné, s úlohou nesouvisející věci. Můžeš se spolehnout, že u každé úlohy budou vstupní data zadána korektně dle specifikace vstupu. Taktéž výstup tvého programu by měl zadanému formátu odpovídat. Není třeba vypisovat věci typu "Zadejte dvě celá čísla", resp. "Výsledek je", pokud to úloha explicitně nevyžaduje.

Doporučujeme nepoužívat ve Tvých programech pokročilé knihovny, které některé jazyky nabízejí (třeba knihovna STL pro C++). Důvod je jednoduchý: jaký má smysl ve Tvém řešení používat knihovny, které navrhl a naprogramoval někdo jiný? Co se na takovém řešení sám naučíš? Samozřejmě, pokud dobře rozumíš tomu, co se v hloubi dané knihovny a knihovní funkce děje, a víš, jakou má daná operace složitost, proti jejímu použití nic nenamítáme. Vždy se ale zamysli: nedokázal bys stejnou funkci napsat sám mnohem lépe a rychleji?

Po skončení každého kola budou tvá řešení tohoto typu úloh zkontrolována a budeš se moci podívat, jak jsi dopadl.

Úlohy typu: Zamysli se!

Tyto úlohy jsou obvykle více teoretické a vyžadují tak, aby ses nad nimi důkladně zamyslel. Oproti předchozímu typu úloh nemusíš nic programovat, odevzdává se pouze slovní popis řešení problému (jak má takový popis vypadat a co platí pro nahrávání řešení se můžeš dočíst výše -- podmínky jsou stejné).

Také tento typ úloh bude zkontrolován na konci každého kola, kdy se dozvíš výsledky.

Úlohy typu: Odpověz Sfinze!

Pokud ti nevyhovují teoretické úlohy a raději by sis procvičil/a své programátorské umění, je tento typ úloh pro tebe jako dělaný. V úlohách tohoto typu není vyžadován slovní popis, je však potřeba vyřešit daný problém a toto řešení pak precizně naimplementovat. Oproti ostatním typům úloh se navíc okamžitě dozvíš, zda je tvé řešení správné, či ne.

Jakmile si budeš myslet, že máš úlohu typu Odpověz Sfinze! vyřešenou, přímo naprogramuješ řešení. Až si budeš jistý/á, že je program správný a splňuje specifikaci v zadání, přímo na našich stránkách si necháš vygenerovat vstupní data. Od toho okamžiku ti začne běžet čas. V tomto časovém limitu je na tobě, aby sis vygenerovaná vstupní data stáhl do počítače, předložil je svému programu a jeho výstup poté nahrál zpět na naše stránky. Jakmile tak učiníš, okamžitě se dozvíš verdikt - tj. zda se tvůj výstup shoduje s referenčním a zda tak dostaneš za úlohu nějaké body. Pokud nestihneš do časového limitu nahrát výstup na stránky (ať už je důvod jakýkoliv), bude takový pokus automaticky ohodnocen jako chybný. Neboj se však, za chybné pokusy se žádné body nestrhávají, jen si po nějakou krátkou dobu nebudeš moci vygenerovat další vstupní data.

Z tohoto typu odevzdávání samozřejmě vyplývá, že můžeš řešit úlohy libovolným způsobem (např. ručně, či na kalkulačce), jelikož důležité je pouze odevzdat správný výstup. Nikdo tě za alternativní postupy trestat nebude, avšak věz, že naprogramování korektního řešení úlohy bude ve většině případů (ne-li ve všech) jediným postupem, jak úlohu stihnout vyřešit v časovém limitu a jak se tudíž dobrat k pozitivnímu verdiktu od našeho vyhodnocovače.

Samozřejmostí je, že vygenerovaná data budou odpovídat specifikaci v zadání úlohy (stejně jako u úloh typu Rozmysli, popiš a naprogramuj!). Stejně tak se však tvůj výstup musí shodovat s výstupem požadovaným v zadání úlohy. Pokud např. budeš vypisovat byť jen několik znaků navíc, nemusí být tvé řešení přijmuto jako validní, ačkoliv samotný algoritmus řešení může být správný. Je tak rozdíl např. mezi výstupem "Vysledek je 5" a výstupem "Je potreba 5 cihel". Jelikož výstupy nekontroluje člověk, je potřeba tuto podmínku striktně dodržovat - na reklamace v těchto případech nebude možno brát zřetel.

Jak již bylo zmíněno, u tohoto typu úloh se své bodové ohodnocení dozvíš okamžitě.