Решение на Дигитален корен от Дойчин Атанасов
Към профила на Дойчин Атанасов
Резултати
- 17 точки от тестове
- 0 бонус точки
- 17 точки общо
- 5 успешни тест(а)
- 1 неуспешни тест(а)
Код
Лог от изпълнението
Compiling solution v0.1.0 (/tmp/d20200111-2173579-147dje2/solution) Finished test [unoptimized + debuginfo] target(s) in 5.29s Running target/debug/deps/solution-a73e64ec87929bd0 running 5 tests test test_basic ... ok test test_binary ... ok test test_decimal ... ok test test_hex ... ok test test_octal ... ok test result: ok. 5 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 ... FAILED test solution_test::test_zeroes ... ok failures: ---- solution_test::test_octal_basic stdout ---- thread 'main' panicked at 'assertion failed: `(left == right)` left: `Some(3)`, right: `Some(5)`', tests/solution_test.rs:34:5 note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace. failures: solution_test::test_octal_basic test result: FAILED. 5 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out error: test failed, to rerun pass '--test solution_test'
История (2 версии и 6 коментара)
Дойчин качи решение на 02.11.2019 17:29 (преди почти 6 години)
Може да заместиш тези две if-клаузи, използвайки оператора ?
:
if input.len() <= 1 {
return input.chars().next()?.to_digit(radix);
}
Дали е добра идея -- зависи. С две отделни if-клаузи стават малко по-ясни различните два случая. Въпросчето по средата на реда може освен това да се изгуби малко, така че ако не друго, може би поне бих направил това:
if input.len() <= 1 {
let only_char = input.chars().next()?;
return only_char.to_digit(radix);
}
Вариант е:
for ch in input.chars() {
sum += ch.to_digit(radix)?;
}
Осмичното форматиране не е с 0
, а е със o
. Това е грешка, която ще излезе само при рекурсивно извикване с поне 2 цифри, понеже ако е само една валидна осмична, ще се форматира по същия начин в десетична и в осмична система. Ударил си неприятен edge case, basically.
Със сигурност исках да напиша o
, но явно при някакво форматиране се е превърнало в 0
😂 Истинския ми проблем е, че никой от тестовете ми за octal не влизат рекурсивно навътре.
Yup. Добре си се погрижил да напишеш тестове, но не си успял да покриеш този случай. То и официалните тестове са малко basic, но изглежда сме те хванали :).
Не бяхме преподали оператора ?
за домашното, но ако решиш да го приложиш, може 1-2 места да се посъкратят. Иначе, освен проблема с осмичното конвертиране, чудесно решение.
Може да заместиш тези две if-клаузи, използвайки оператора
?
:Дали е добра идея -- зависи. С две отделни if-клаузи стават малко по-ясни различните два случая. Въпросчето по средата на реда може освен това да се изгуби малко, така че ако не друго, може би поне бих направил това:
Вариант е:
Осмичното форматиране не е с
0
, а е съсo
. Това е грешка, която ще излезе само при рекурсивно извикване с поне 2 цифри, понеже ако е само една валидна осмична, ще се форматира по същия начин в десетична и в осмична система. Ударил си неприятен edge case, basically.Със сигурност исках да напиша
o
, но явно при някакво форматиране се е превърнало в0
😂 Истинския ми проблем е, че никой от тестовете ми за octal не влизат рекурсивно навътре.Yup. Добре си се погрижил да напишеш тестове, но не си успял да покриеш този случай. То и официалните тестове са малко basic, но изглежда сме те хванали :).