1
- use std:: collections:: HashMap ;
1
+ use std:: collections:: { HashMap , HashSet } ;
2
2
3
3
pub fn count ( nucleotide : char , dna : & str ) -> Result < usize , char > {
4
4
if !valid_nucleotide ( nucleotide) {
5
- return Err ( nucleotide)
5
+ return Err ( nucleotide) ;
6
6
}
7
7
let counts = nucleotide_counts ( dna) ?;
8
8
Ok ( * counts. get ( & nucleotide) . unwrap ( ) )
@@ -11,7 +11,7 @@ pub fn count(nucleotide: char, dna: &str) -> Result<usize, char> {
11
11
pub fn nucleotide_counts ( dna : & str ) -> Result < HashMap < char , usize > , char > {
12
12
for c in dna. chars ( ) {
13
13
if !valid_nucleotide ( c) {
14
- return Err ( c)
14
+ return Err ( c) ;
15
15
}
16
16
}
17
17
let mut counts: HashMap < char , usize > = default_map ( ) ;
@@ -24,21 +24,10 @@ pub fn nucleotide_counts(dna: &str) -> Result<HashMap<char, usize>, char> {
24
24
}
25
25
26
26
fn default_map ( ) -> HashMap < char , usize > {
27
- let result = HashMap :: from ( [
28
- ( 'A' , 0 ) ,
29
- ( 'C' , 0 ) ,
30
- ( 'G' , 0 ) ,
31
- ( 'T' , 0 ) ,
32
- ] ) ;
33
- result
27
+ HashMap :: from ( [ ( 'A' , 0 ) , ( 'C' , 0 ) , ( 'G' , 0 ) , ( 'T' , 0 ) ] )
34
28
}
35
29
36
- fn valid_nucleotide ( nucleotide : char ) -> bool {
37
- return match nucleotide {
38
- 'A' => true ,
39
- 'C' => true ,
40
- 'G' => true ,
41
- 'T' => true ,
42
- _ => false ,
43
- }
30
+ fn valid_nucleotide ( c : char ) -> bool {
31
+ let nucleotides = HashSet :: from ( [ 'A' , 'C' , 'G' , 'T' ] ) ;
32
+ nucleotides. contains ( & c)
44
33
}
0 commit comments