Решение на Сметки с ДНК от Михаил Енев

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

Към профила на Михаил Енев

Резултати

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

Код

#[cfg(test)]
mod tests {
#[test]
fn it_works() {
assert_eq!(2 + 2, 4);
}
}
pub struct NucleotideCounter {
pub a: usize,
pub c: usize,
pub g: usize,
pub t: usize,
}
impl NucleotideCounter {
fn from(a : usize, c : usize, g : usize, t : usize) -> NucleotideCounter {
Self{a, c, g, t}
}
}

From обикновено е име на асоциирана функция, което се използва за конструиране на една стойност от друга стойност. В случая просто си приемаш компонентите на брояча, така че може би new би било смислено име. Допълнително, може би нямаше смисъл и да се подават -- нов counter има смисъл да се инстанцира с нулеви стойности.

pub fn counts(dna: &[char]) -> NucleotideCounter {
let mut nucl = NucleotideCounter::from(0, 0, 0, 0);
for x in dna {
if x == &'A' {
nucl.a += 1;
}
else if x == &'C' {
nucl.c += 1;
}
else if x == &'G' {
nucl.g += 1;
}
else if x == &'T' {
nucl.t += 1;
}
else {
panic!("Abort! Incorrect dna base!");
}
}
nucl
}
pub fn dna_complement(dna: &[char]) -> Vec<char> {
//todo!()
let mut v : Vec<char> = Vec::new();
for x in dna {
if x == &'A' {
v.push('T');
}
else if x == &'C' {
v.push('G');
}
else if x == &'G' {
v.push('C');
}
else if x == &'T' {
v.push('A');
}
else {
panic!("Abort! Incorrect dna base!");
}
}
v
}
pub fn reverse_rna_complement(dna: &[char]) -> Vec<char> {
let mut v = Vec::new();
for x in dna {
if x == &'A' {
v.push('U');
}
else if x == &'C' {
v.push('G');
}
else if x == &'G' {
v.push('C');
}
else if x == &'T' {
v.push('A');
}
else {
panic!("Abort! Incorrect dna base!");
}
}
v.reverse();
v
}

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

Compiling solution v0.1.0 (/tmp/d20220112-2706256-1yt84f5/solution)
    Finished test [unoptimized + debuginfo] target(s) in 5.73s
     Running tests/solution_test.rs (target/debug/deps/solution_test-4c880d3f0adaac34)

running 12 tests
test solution_test::test_counts_basic ... ok
test solution_test::test_counts_big ... ok
test solution_test::test_counts_panic1 - should panic ... ok
test solution_test::test_counts_panic2 - should panic ... ok
test solution_test::test_counts_zero ... ok
test solution_test::test_dna_complement_big ... ok
test solution_test::test_dna_complement_empty ... ok
test solution_test::test_dna_complement_panic - should panic ... ok
test solution_test::test_reverse_rna_complement_big ... ok
test solution_test::test_reverse_rna_complement_empty ... ok
test solution_test::test_reverse_rna_complement_panic1 - should panic ... ok
test solution_test::test_reverse_rna_complement_panic2 - should panic ... ok

test result: ok. 12 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s

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