Решение на Дигитален корен от Стефан Чолаков
Резултати
- 20 точки от тестове
- 0 бонус точки
- 20 точки общо
- 6 успешни тест(а)
- 0 неуспешни тест(а)
Код
Лог от изпълнението
Compiling solution v0.1.0 (/tmp/d20200111-2173579-jmaf9j/solution) Finished test [unoptimized + debuginfo] target(s) in 1.76s Running target/debug/deps/solution-a73e64ec87929bd0 running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out Running target/debug/deps/solution_test-38971695424b36d5 running 6 tests test solution_test::test_binary ... ok test solution_test::test_decimal_basic ... ok test solution_test::test_hex_basic ... ok test solution_test::test_invalid ... ok test solution_test::test_octal_basic ... ok test solution_test::test_zeroes ... ok test result: ok. 6 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
История (2 версии и 3 коментара)
Стефан качи решение на 03.11.2019 16:17 (преди почти 6 години)
Тук използваш .unwrap()
, което е ок като логика, понеже по-горе си валидирал входа. Предимството на този подход е че валидацията може да бъде доста сложна и съответно можеш да я енкапсулираш в нещо отделно. Недостатъци, които аз виждам, са че 1) loop-ваш два пъти по символите в позитивния случай и 2) ако допуснеш грешка във валидацията, кода ще се счупи тук, което ще е по-трудно за дебъгване.
В този код, нито едно от двете не е голям проблем. В по-сложна ситуация, може да ти попречи тази структура -- зависи и донякъде е въпрос и на вкус. Но rust ти дава добри инструменти за едновременно валидиране и вземане на стойност -- ако просто заместиш този .unwrap()
с ?
, мисля че директно можеш да махнеш is_valid
функцията (не съм 100% сигурен, но така ми изглежда). Просто нещо, за което да помислиш за по-нататък.
На теория, може би просто можеш да провериш дали низа е "0"? Either way, добре си се сетил, че за двоични числа може да е само 1, ако имаш поне една единица :).
Добро решение. На някои места имаш малко странна индентация -- не е голям проблем, но си заслужава човек да си подрежда кода, помага със самодисциплината :).
Тук използваш
.unwrap()
, което е ок като логика, понеже по-горе си валидирал входа. Предимството на този подход е че валидацията може да бъде доста сложна и съответно можеш да я енкапсулираш в нещо отделно. Недостатъци, които аз виждам, са че 1) loop-ваш два пъти по символите в позитивния случай и 2) ако допуснеш грешка във валидацията, кода ще се счупи тук, което ще е по-трудно за дебъгване.В този код, нито едно от двете не е голям проблем. В по-сложна ситуация, може да ти попречи тази структура -- зависи и донякъде е въпрос и на вкус. Но rust ти дава добри инструменти за едновременно валидиране и вземане на стойност -- ако просто заместиш този
.unwrap()
с?
, мисля че директно можеш да махнешis_valid
функцията (не съм 100% сигурен, но така ми изглежда). Просто нещо, за което да помислиш за по-нататък.На теория, може би просто можеш да провериш дали низа е "0"? Either way, добре си се сетил, че за двоични числа може да е само 1, ако имаш поне една единица :).