Стефан качи първо решение на 08.12.2017 02:07 (преди почти 8 години)
Имаш компилационна грешка! Базовия тест не я хваща, понеже е трудно да уловим всички, но виж условието -- TryLetter(char)
, а не TryLetter(String)
. Оправи си този проблем, или ще останеш с 0 точки.
Освен компилационната грешка, решението изглежда сложничко на места. Това с 4те индекса примерно, не го разбрах съвсем. Доста полезно ще ти е да прочетеш останалите решения тук: https://fmi.rust-lang.bg/tasks/4/solutions
Честно да ти кажа аз също на моменти не разбирам какво съм писал в кода, тъй като както винаги всичко ми се изсипва наведнъж и трябваше да пиша задачата ден преди крайния срок. Четирите индекса го оставих така, защото просто заработи и не ми се мислеше как може да стане по-лесно. Иначе за компилационната грешка от проверяващата система ли е, защото при мен базовия тест върви и бях тествал през main и вариант с дума на кирилица и също тръгна.
Знам, че базовия тест минаваше, но е защото този път не успях да вмъкна достатъчно проверки, изглежда. Ако видиш условието, вместо TryLetter(char)
, си ползвал TryLetter(String)
, което при какъвто и да е по-обстоен тест, няма как да се компилира. Ще ми се да бях вмъкнал някакси проверка за това, (и всъщност го направих, след като намерих проблема: https://github.com/fmi/rust-homework/commit/c1f075f8f1569e8c5964885df6608d276b274286), но дори и без това, беше си написано в условието. Ако сме сложили определени конкретни типове/сигнатури, очакваме да се използват. Даваме ви колкото свобода можем за internals, но интерфейсите трябва да са 1:1, за да можем да ги тестваме.
В случая съм убеден, че е станало от бързане, и се надявах за 1 ден да успееш да си го поправиш, ама... не стана :). Ще имаш шанс да наваксаш откъм точки, но те съветвам да пробваш да си алокираш време по-отрано следващия път. Rust не е от езиците, в които можеш да напишеш работещо решение в последния момент :).
Да, убедих се, че не е толкова лесно да се напише добро и работещо като цяло решение за 1 ден, а особено като разбрах, че първоначалната ми идея да обхождам string с for както в C++ няма как да се получи, тъй като Rust работел главно с итератори, а не с индекси, пък от друга страна string в Rust разбрах, че е и с UTF-8 encoding, който също не може да се обхожда с индекси, и въобще не ми стана приятно, но уви, пробвах да скалъпя някакво решение, тръгна ми базовия тест (зарадвах се като първокурсник :D ), реших че съм готов и въобще дори не съм обърнал внимание, че съм писал TryLetter(String), вместо TryLetter(char). Иначе да, ще се пробвам да си заделям повече време за писане, стига ФМИ да не ми обърква още повече графиците.
Е, ако не се използват, може просто... да не ги import-ваш :)
Не е нужно да си пишеш сам функцията
is_alphabetic
: https://doc.rust-lang.org/std/primitive.char.html#method.is_alphabeticДа, видях я функцията, просто не бях сигурен дали работи за &str, защото беше в char секцията, и реших да си напиша своя.
Аха, вярно, сега осъзнах, че тази е върху
&str
. Все пак, по-просто би билоsome_string.chars().all(char::is_alphabetic)
Метода
len
брои байтове, а не char-ове: https://doc.rust-lang.org/std/primitive.str.html#method.len. Това води до грешка при буква на кирилица.Знам, явно тук съм пропуснал да го сменя с chars().count()