Решение на Hangman от Михаил Младенов
Към профила на Михаил Младенов
Резултати
- 15 точки от тестове
- 0 бонус точки
- 15 точки общо
- 15 успешни тест(а)
- 0 неуспешни тест(а)
Код
Лог от изпълнението
Compiling solution v0.1.0 (file:///tmp/d20171210-6053-1dk6z4c/solution) Finished dev [unoptimized + debuginfo] target(s) in 5.30 secs Running target/debug/deps/solution-3f98bfa5c86a5dd9 running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out Running target/debug/deps/solution_test-3d9e4ea2eafbbc82 running 15 tests test solution_test::test_command_parsing_cyrillic ... ok test solution_test::test_command_parsing_extra_stuff ... ok test solution_test::test_command_parsing_full_words ... ok test solution_test::test_command_parsing_partial_words ... ok test solution_test::test_command_parsing_spacing ... ok test solution_test::test_command_parsing_special ... ok test solution_test::test_game_basic ... ok test solution_test::test_game_cyrillic ... ok test solution_test::test_game_display ... ok test solution_test::test_game_error ... ok test solution_test::test_game_guess_basic ... ok test solution_test::test_game_guess_state_lose ... ok test solution_test::test_game_guess_state_won ... ok test solution_test::test_game_guess_word ... ok test solution_test::test_game_over_guesses ... ok test result: ok. 15 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out Doc-tests solution running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
История (4 версии и 6 коментара)
Михаил качи решение на 05.12.2017 04:19 (преди почти 8 години)
Защо не направиш функции, които се извикват и правят по един match? Ще е по лесно за четене и дебъгване + няма да изглежда като елха.
Много бързах за това домашно и като цяло не съм отделил много време за мислене (исках просто да подкарам нещо), за това стана толкова неграмотно. Но да това е добра идея. Утре ще пробвам да го пооправя (също този път не съм правил никакви тестове за коректност освен предоставените базови, което значи, че сигурно ми гърми на много места...).
Не на толкова много. Ако обърнеш внимание на това изречение от условието, например : "Тоест, ако решението е "крокодил", и сме пробвали буквата "к" и буквата "о", може да извадите това: ...", има hint, какво би било проблем :)
Михаил качи решение на 07.12.2017 15:56 (преди почти 8 години)
Михаил качи решение на 07.12.2017 15:58 (преди почти 8 години)
Тцъ, жалко, наистина :).
Супер става!
Последен hint; Всичко ли е изпълнено от условитето тук?
Ще се наложи да обработите входа и да прецените коя команда с какви параметри ще извадите. Ще дадем доста свобода на входа, за доброто на потребителя:
* Малки или големи букви нямат значение. Командите help, Help и HELP са еквивалентни
* Начален и краен whitespace няма значение. Низа try letter x е еквивалентен на try letter x
* Може командите да бъдат съкратени, примерно t l x и tr le x са еквивалентни на try letter x. (Hint: може да проверявате първите буквички, няма да тестваме с неща като "hlep" или "ifno")
* Всичко след правилната команда се игнорира. Тоест, help i need somebody се парси просто до Command::Help, a try word one two three се парси до Command::TryWord(String::from("one"))
* Няма да тестваме с повече от един интервал между компонентите. Чувствайте се свободни да разбивате входа по само един интервал. (Макар че hint: типа &str си има вече метод за тая цел)
* Няма да тестваме за валидност на символа или думата. По-долу, когато инициализирате играта, ще проверявате дали решението е валидно, но тук няма нужда (макар че ако искате, няма да попречи).
Решението е стабилно, единствения бъг е свързан с case-insensitivity-то на буквата, която подаваш. Командата "Try Letter Z" я превеждаш до TryLetter('Z')
, а в тестовете я превеждаме до TryLetter('z')
, понеже downcase-ваме всичко.
Точно ти ме пита за case-sensitivity, и те уверих, че е не проблем. Така че ще пробвам да променя теста и да ги пусна отново, ако не проработи, ще ти дам една бонус точка, за да negate-на това.
Тцъ, жалко, наистина :).