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

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

Към профила на Калоян Манолов

Резултати

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

Код

fn find_sum(input: &str, base: u32) -> Option<u32> {
let input_characters = input.chars();
let digits = input_characters.map(|x| x.to_digit(base));
let digit_sum = digits.sum();
let current_sum = match digit_sum {
Some(sum) => if sum < base {
return digit_sum
} else {
sum
}
None => return None
};

Добра употреба на sum за списък от Option! Дори не знаех, че това работи :).

Можеш да използваш оператора ? за Option, така че вероятно можеше да се отървеш от match клаузата:

let current_sum = digits.sum()?;

if current_sum < base {
    return current_sum
}
let current_sum_str = match base {
2 => format!("{:b}", current_sum),
8 => format!("{:o}", current_sum),
10 =>format!("{}", current_sum),
16 => format!("{:x}", current_sum),
_ => return None
};
find_sum(&current_sum_str, base)
}
/// Десетична бройна система: 0-9
pub fn decimal(input: &str) -> Option<u32> {
find_sum(input, 10)
}
/// Шестнадесетична бройна система: 0-9, последвано от a-f
pub fn hex(input: &str) -> Option<u32> {
find_sum(input, 16)
}
/// Осмична бройна система: 0-7
pub fn octal(input: &str) -> Option<u32> {
find_sum(input, 8)
}
/// Двоична бройна система: 0-1
pub fn binary(input: &str) -> Option<u32> {
find_sum(input, 2)
}

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

Compiling solution v0.1.0 (/tmp/d20200111-2173579-b3s923/solution)
    Finished test [unoptimized + debuginfo] target(s) in 1.67s
     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 версия и 2 коментара)