Как да (не) си изпращаме задачите

Тук ще намерите кратки (или не толкова кратки) инструкции за това как да си изпращате задачите.

Накратко

  • Прочетете си условието внимателно и дори няколко пъти.
  • Създайте нов проект с cargo new --lib solution
  • Напишете решение в src/lib.rs
  • Изпълнете примерния тест. Ако кода ви не се компилира на примерния тест, ще получите 0 точки.
  • Проверете, че типовете на функциите и структурите ви са същите, които сме описали в условието. Ако решите да върнете тип Foo вместо описания тип &Foo, нашите тестове просто няма да се компилират и ще получите 0 точки.
  • Не ползвайте външни библиотеки (не можете да ги качите в интерфейса).
  • Не споделяйте решението си с никого.
  • Не гледайте чужди решения.
  • Копирайте цялото съдържание на src/lib.rs в текстовото поле в сайта.

Преписване и споделяне на решения

Всички решения стават публични след крайния срок на задачата. Преди това всякакво споделяне на решения е забранено.

Това включва:

  • Да пратите решението си на някой друг.
  • Да го покажете на другарче, за да "почерпи идеи".
  • Да го сложите някъде публично преди крайния срок (например GitHub).

Ако хванем, че сте преписвали, ви късаме без много-много обяснения и губите всичките си точки от задачи. Когато се видим през септември, схемата за оценява продължава да важи за вас и вие продължавате да имате 0 точки от задачи. Това означава, че ако решим да ви пуснем, ще изкарате най-много 3. Ако сте много нахални, санкциите могат да бъдат по-тежки.

Често виждаме двойка решения, едното от които е променено за да изглежда различно. Това се хваща по-лесно, отколкото си мислите. Имаме достъп до всички задачи, които сте предали, както и до тези на другарчето ви. Ако решим, че случая е такъв, няма да даваме много обяснения. По-добре не го правете.

От друга страна, не се притеснявайте да напишете най-простия възможен код, понеже "други хора ще предадат същото решение". Това също се разпознава лесно, и разбира се, няма да сметнем, че сте преписвали. Пишете най-добрия код, на който сте способни, не споделяйте решенията си и няма да има причина да се притеснявате, че ще помислим, че сте преписвали.

От какво имате нужда

Ако пращате задача за първи път, проверете, че имате cargo:

$ cargo --version
cargo 1.56.0 (4ed5d137b 2021-10-04)

Тестването се прави чрез командата cargo test.

Примерен тест

С всяка задача публикуваме примерен тест в GitHub хранилището. Задължително изтеглете теста и го пуснете. Задачите се проверяват автоматично с тестове, и ако кода ви не се компилира с базовия тест, няма да се компилира и при проверката. В резултат на което ще получите 0 точки.

Ако базовия тест се компилира, но не минава, изглежда не сте имплементирали нещо правилно -- можете все пак да пуснете домашно за което може да изкарате частичен брой точки. Все пак силно ви съветваме просто да почнете по-отрано с домашното и да го решите напълно.

За да пуснете теста:

  • Запазете тестовия файл като tests/test_basic.rs (в проекта, инициализиран по-горе с cargo new)
  • Изпълнете следната команда:

    $ cargo test
    

За повече информация за тестването в Rust, прочетете тази глава в документацията.

Още съвети

Чувствайте се напълно свободни да напишете още тестове. Примерния тестов файл ще е единствено sanity check, който проверява няколко прости случая. Истинския тест ще е доста по-обстоен и е добре да помислите какви още случаи не са покрити, и да ги допишете.

Първото домашно може би ще ви изглежда лесно. Това може да ви накара да си помислите "е, аз това мога да го напиша за час-два преди крайния срок". Вероятно не можете. Rust не е лесен език за научаване, и ако не сте писали вече код на Rust, не подценявайте трудността на първото домашно, дори и да ви изглежда лесно условието.

Второто домашно може би ще си мислите, че ще е толкова лесно, колкото първото и ще го оставите за час-два преди крайния срок. Няма да бъде. Като стигнем до второто домашно, ще имаме достатъчно интересен материал, за да ви предизвикаме малко.

Като цяло, не оставяйте домашното за последния момент. Ако не друго, ако пуснете домашно половин час преди крайния срок с някаква дребна грешка, няма кога да видим това и да ви предупредим. А съобщение от типа "аз тъкмо щях да го оправя, но закъснях с 1 минута след крайния срок" няма да има ефект -- 1 минута около крайния срок не е време за писане или оправяне на домашното, предвид че ще ви дадем една цяла седмица.