Такмичарско окружење¶
У овом делу можеш видети све информације о томе како изгледа такмичарско окружење на Петљи и како да користиш све функционалности које оно пружа.
Ако сте наставник и желите да направите сопствено такмичење, можете погледати ово упутство.
Преглед, информације и слање решења¶
Када приступиш такмичењу, са леве стране видећеш излистане задатке. Кликом на задатак приступаш сваком појединачном задатку.
Када кликнеш на било који задатак, испод текста задатка ћеш видети листу понуђених програмских језика на којима се може писати решење. Изабери језик који користиш. Када напишеш програм којим си задовољан/на и који желиш да пошаљеш, означи цео текст програма у едитору окружења у коме пишеш програме (ово врло вероватно можеш да урадиш притиском на тастере Ctrl + А), копирај (Ctrl + C), затим кликни у прозор испод текста задатка предвиђен за твоје решење и залепи свој програм (Ctrl + V). Ако текст програма означаваш мишем, води рачуна да означиш САВ ТЕКСТ програма (чест пропуст – довољно је да се изостави само први или последњи карактер текста програма и да копирани „програм” уопште не може да се изврши). Други начин да пошаљеш свој програм на тестирање је да програм учиташ из фајла са свог рачунара тако што ћеш кликнути на „Учитај” и изабрати жељени фајл. Када убациш свој програм у простор који је за то предвиђен, кликни на дугме „Пошаљи”. Ако је све у реду, поред тог дугмета треба да се појави порука да је решење успешно послато, а у десном доњем углу, појавиће се порука да ли је твој код истестиран (слика испод)
Имај у виду да када једном пошаљеш код, следећи пут можеш да га пошаљеш тек после одређеног времена. То време одређено је у пропозицијама такмичења и може се разликовати од такмичења до такмичења. Да би сазнао колики је тај временски период, потребно је да кликнеш на „Информације”, где ћеш поред минималног времена између слања различитих решења видети и друге услове такмичења на коме учествујеш. Пре свега, видећеш да ли има казнених поена, како се оцењује, који су језици доступни, да ли се бодује најбоље послато решење или последње послато решење, као и све остале информације од значаја.
Када кликнеш на „Преглед” (изнад задатака) требало би да видиш део који се зове „Моји Поени”, где ћеш моћи да видиш поене које си остварио/ла ако је то на такмичењу дозвољено, а испод тога и део „Послата решења”, у коме се налазе подаци о сваком коду који си послао/ла. У пољу резултат могуће је, у зависности од такмичења на коме учествујеш, да се појави број поена које си остварио/ла, знак питања (уколико на том такмичењу није могуће видети резултате), или CE (compilation error) уколико је дошло до грешке приликом компајлирања.
Такође, кликом на лупу моћи ћеш да видиш како се твој код понашао на тест примерима уколико такмичење на коме учествујеш такмичарима/кама пружа могућност да имају увид у резултате свих тест примера. Твој код може на тим примерима да даје различите резултате, и сходно томе имаће различит статус. Могући статуси означени су следећим ознакама (а налазе се и у левом доњем углу Арене):
ОК - ок (програм је у дозвољеном времену и простору дао очекивани излаз)
WА - wrong answer (излаз програма је различит од очекиваног)
TLE - time limit exceeded (програм је прекорачио временско ограничење)
MLE - memory limit exceeded (програм је прекорачио меморијско ограничење)
RTE - run-time error (програм је покушао нешто што није изводљиво и зато није успео да се изврши до краја. Примери за то су дељење нулом, рачунање квадратног корена из негативног броја, приступање непостојећем елементу низа – ван граница низа, и слично)
NT - not tested (на неким такмичењима тестирање се прекида након првог примера на коме статус није ОК и у том случају остали примери нису тестирани и обележени су овим статусом)
? – резултат је скривен, то јест, такмичење је подешено тако да не можеш да видиш резултате на (неким или свим) тест примерима
- значи да је тестирање на чекању, то јест да наш систем још увек није оценио твој код
CЕ - compilation error (неуспешно компајлирање) – ако се поред кода који си послао појави CE, имаш могућност да кликом на лупу видиш због чега је компајлирање било неуспешно. У том случају требало би да видиш поруку сличну овој на слици испод. Савет: ако си добио/ла овај резултат, провери да ли си добро изабрао/ла програмски језик пре слања решења на оцењивање и да ли је цео код послат на оцењивање.
Имај у виду да ће на неким такмичењима једини тест случајеви за које ћеш моћи да видиш резултат бити они који се налазе у тексту задатка и да у свим осталим случајевима нећеш моћи да видиш како се твој код понаша. Зато ће се поред њих појавити знак питања, што значи да је резултат теби недоступан.
На истој овој страници, испод описаног дела „Моји поени”, налази се део који се зове „Послата решења”
Овде за свако решење које си послао/ла можеш да видиш када је решење послато, за који задатак (проблем) је послато решење, који програмски језик је одабран пре слања и на крају (ако је такмичење подешено тако да су резултати јавни) резултат добијен за то решење. Кликом на лупу на крају реда отвара се прозор са детаљима. У зависности од типа задатка и начина бодовања ови детаљи могу различито да изгледају. Описаћемо изглед овог прозора само за два типа задатка са којима се такмичари у почетку најчешће срећу.
Задаци у којима се бодује сваки тест пример посебно
Код ове врсте задатака, ако су резултати јавни (у пробном такмичењу за тестирање такмичарског окружења то је задатак A) прозор са детаљима о једном решењу изгледа као на следећој слици.
Овде за сваки тест пример можеш да видиш који одговор је решење добило на том тесту, колико поена тај одговор носи, колико је трајало извршавање програма и колико је меморије програм заузео приликом извршавања.
Задаци са тест примерима груписаним у подзататке (енгл. subtasks).
Код ове врсте задатака се не бодује сваки тест пример појединачно него се бодују групе тест примера које се зову подзадаци. Да би се за једну групу тест примера, односно један подзадатак освојили поени предвиђени за њега, потребно је да програм на време и тачно реши све тест примере из групе. Тиме се постиже објективније оцењивање из више разлога, на пример теже је добити поене случајно, тј. погађањем резултата. Ово се нарочито види у задацима где постоји веома мали број могућих одговора (нпр. само „да” или „не”), где би при бодовању на појединачним тестовима програм који само исписује „да” (и суштински уопште не решава задатак) освојио неке поене, а при бодовању група тестова такво решење не доноси поене. У пробном такмичењу за тестирање такмичарског окружења, задатак овог типа је C и за њега прозор са детаљима решења изгледа као на следећој слици.
Овде за сваки подзадатак можеш да видиш број поена освојен на том подзадатку (велики број лево), а затим колико тест примера из тог подзадатка је имало који статус, као и време извршавања и меморију заузету током извршавања. У конкретном случају са слике, на пример трећи подзадатак садржи шест тест примера и донео је 30 поена (свих 6 примера је добило одговор ОК, а примера са другачијим одговором није било, што показују нуле испод тих одговора).
Улаз и излаз¶
Приликом израде задатака и слања решења, обавезно обрати пажњу на очекиван формат за улазне и излазне вредности које су одређене текстом задатка. Као што знаш, тестирање на нашем систему је аутоматско. Захваљујући томе, можемо за кратко време да тестирамо велики број послатих решења. Нажалост, аутоматизација тестирања значи и да је то тестирање прилично строго.
ВАЖНО!!!
Зато је јако важно да твој програм исписује тачно оно што се тражи (без додатака) и то тачно онако како се тражи. У противном се може догодити да решење које је суштински тачно буде оцењено као погрешно, јер тачан резултат није препознат као тачан због начина на који је исписан. На пример, ако је у задатку речено да излаз треба да буде један цео број, очекује се да твој програм испише само један цео број. Ако програм исписује, на пример, „тачно решење је: 5”, а не само 5, твоје решење може бити оцењено као погрешно, иако си можда концептуално лепо решио/ла задатак. Исти је случај ако употребиш мала слова уместо великих и обрнуто (на пример, ако треба исписати „да” а твој програм исписује „Да” или „ДА”).
Такође, твој програм треба да учитава податке тачно онако како ће они бити и задати при аутоматском тестирању. На пример, ако је речено да ће у једном реду бити задато више бројева раздвојено размацима, онда твој програм треба тако и да их учитава. Приликом учитавања програм не треба да исписује поруке попут Unesi N из већ објашњених разлога. При ручном тестирању програма (пре слања на оцењивање) обавезно уноси податке тачно онако како је описано.
Тестирај код, питања, обавештења¶
Арена ти пружа још неке важне могућности које ће ти помоћи током такмичења. Када кликнеш на дугме „Тестирај код” које се налази испод задатака у менију са леве стране, добићеш могућност да без слања решења задатка на проверу, видиш које су излазне вредности за одређени улаз. Потребно је да поново изабереш програмски језик, да ископираш свој код у горњи прозор, и онда ћеш моћи унесеш вредности улаза у десни прозор, кликнеш на дугме „Покрени” и у левом прозору видиш шта је резултат извршавања твог кода као и време извршавања кода и потребну меморију. Код тестиран на овај начин неће ући међу послата решења.
Испод дугмета „Тестирај код”, налазе се дугме „Питања” и „Обавештења”. Када кликнеш на „Питања”, добићеш могућност да организатору такмичења поставиш питање и ту ћеш видети одговор када га организатор пошаље.
Испод „Питања” налазе се обавештења. Она су важна зато што путем обавештења организатор такмичења шаље информацију која је релевантна за све такмичаре, па је наш савет да редовно провераваш обавештења и да, пре него што поставиш питање, погледаш да се у обавештењима не налази баш оно што тебе занима.
Коначно, наш главни савет је да испробаш све могућности које ти Петљино такмичарско окружење пружа и да током такмичења слободно кликнеш на „Питања” и питаш све што ти није јасно (најгоре што може да се догоди је да добијеш одговор No comment, што значи да организатор такмичења сматра да не може да одговори на то питање). Осим тога, важно је да са времена на време кликнеш и на „Обавештења” како не би пропустио/ла неку важну информацију.