Трета задача вече е онлайн, тук е мястото да задавате въпроси и споделяте тестове за колегите си.
Напомняме, че тук не се обсъжда код, само въпроси по условието. Ако има нужда, може да обсъдим кода ви по мейл.
Трета задача вече е онлайн, тук е мястото да задавате въпроси и споделяте тестове за колегите си.
Напомняме, че тук не се обсъжда код, само въпроси по условието. Ако има нужда, може да обсъдим кода ви по мейл.
Трябва ли решението ни да поддържа повече от една дума?
Доколкото разбрах, в низа solution
не трябва да има неазбучни символи, затова приемам, че решенията винаги са от една дума. От друга страна, в описанието на метода guess_word
е написано:
Приема дума, проверява дали тази дума присъства в решението:
...
Тук думата присъства ме навежда на мисълта, че все пак трябва да поддържаме решения с повече от една дума.
Та в крайна сметка нужно ли е да добавяме поддръжка за повече от една дума към решенията си?
Само една дума трябва да е, винаги. Използването на "присъства" вероятно е заради copy-paste от case-а с буквите. Ще го оправя в условието.
GameError::GameOver
не е казано къде се използва.
Бих предположил, че се връща от guess_letter
и guess_word
ако играта е вече приключила (attempts_remaining
е 0
преди намаляването). В този случай пише, че трябва да се върне Ok(false)
и да се намали self.attempts_remaining
, но то е дефинирано като u32
.
Трябва ли да върнем грешка или да игнорираме декрементирането в този случай?
Знаех си, че ще отърва нещо в условието! Да, GameOver
е грешка, която се връща, ако се опитаме да викнем guess_
метод на игра, която вече е приключила. Обнових условието да включва тазу клауза.
При това положение, проблема с u32
се премахва, понеже при attempts_remaining
0, играта е приключена и викането на методите ще върне Err
.
Един малък hint, който току-що добавих: ок е просто да проверявате първите букви на командите (и подкомандите). Тоест, "t l x" се парси до същото като "try letter x", което, ако искате, се парси до същото като "too late x". Свободни сте и да бъдете по-стриктни, просто няма да пишем тестове за неща като "too late x".
Един малък hint, ако някой има време да си прегледа кода близко до срока (и чете форумите): Пробвахте ли да тествате с кирилица? Примера с думата "крокодил", например? Може да откриете лесен фикс, който да ви спечели 1-2 точки.
Сега докато си оправях въпросния бъг от горния хинт ми изникна въпроса дали тестването на букви и думи е кейс сенситив, тоест ако думата е КрОкодил и тестваме с 'О', какво да очакваме " _ О _ _ _ _ " или " _ О _ о _ _ " или " _ О _ О _ _ " или " _ о _ о _ _ " .
Хм. Това е добър въпрос, за който не се бях сетил. Нямаме в тестовете проверка за това. Аз бих lowercase-нал буквата, но е ок да не го правите, понеже няма тестове за това (макар че има тестове за case-sensitivity на самите команди, както е описано в условието...).
Предоставям малко по-подробни тестове, които написах (за хората, които правят параноични проверки по домашното си в последния момент ;-):
След края на задачата, ако някой иска една main функция, с която да си поиграе играта, ето една примерна: https://gist.github.com/AndrewRadev/f53364f526ada6c8962ee50c49ee3f55
Трябва да сте влезли в системата, за да може да отговаряте на теми.