Решение на Дигитален корен от Стела Маринова

Обратно към всички решения

Към профила на Стела Маринова

Резултати

  • 20 точки от тестове
  • 0 бонус точки
  • 20 точки общо
  • 6 успешни тест(а)
  • 0 неуспешни тест(а)

Код

fn string_to_digits(n:&str, p:u32) -> Option<Vec<u32>>{
let mut v:Vec<u32> = Vec::new();
for (_, x) in n.chars().enumerate(){
let k = x.to_digit(p);
match k {
Some(k) => v.push(k),
None => return None,
}
}
return Some(v);
}
fn sum_digits(v:Vec<u32>, p:u32) -> u32{
let mut s:u32 = v.into_iter().sum();
if s < p {
return s;
}
let mut a:Vec<u32> = Vec::new();
while s != 0{
a.push(s%p);
s = s / p;
}
return sum_digits(a, p);
}
fn calculate(input:&str, p:u32) -> Option<u32>{
let v = string_to_digits(input, p);
match v {
Some(v) => return Some(sum_digits(v, p)),
None => return None,
}
}
/// Десетична бройна система: 0-9
pub fn decimal(input: &str) -> Option<u32> {
return calculate(input, 10);
}
/// Шестнадесетична бройна система: 0-9, последвано от a-f
pub fn hex(input: &str) -> Option<u32> {
return calculate(input, 16);
}
/// Осмична бройна система: 0-7
pub fn octal(input: &str) -> Option<u32> {
return calculate(input, 8);
}
/// Двоична бройна система: 0-1
pub fn binary(input: &str) -> Option<u32> {
return calculate(input, 2);
}

Лог от изпълнението

Compiling solution v0.1.0 (/tmp/d20200111-2173579-1sb7llw/solution)
    Finished test [unoptimized + debuginfo] target(s) in 3.98s
     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

История (1 версия и 3 коментара)

Стела качи първо решение на 04.11.2019 23:29 (преди почти 6 години)

Добро решение, но избирай по-добри имена на променливите си. Вместо s, би било по-ясно да е sum. Вместо k можеше да е digit, вместо p можеше да е radix или base. Еднобуквените променливи са много лоша идея откъм четимост в дългосрочен план.