diff options
| author | Federico Igne <git@federicoigne.com> | 2020-12-26 17:22:21 +0000 |
|---|---|---|
| committer | Federico Igne <git@federicoigne.com> | 2021-11-03 18:55:08 +0000 |
| commit | 4e2052c4d792540c2f742b2c2a081b11117ed41d (patch) | |
| tree | 6fdfbfd3b6f1c06cf613de2f6f052d39d93ec5e7 /nucleotide-count/src | |
| parent | 8a61a513dad5c22bb5596b8918a2d03755d08d1e (diff) | |
| download | exercism-4e2052c4d792540c2f742b2c2a081b11117ed41d.tar.gz exercism-4e2052c4d792540c2f742b2c2a081b11117ed41d.zip | |
[rust] Nucleotide Count
Diffstat (limited to 'nucleotide-count/src')
| -rw-r--r-- | nucleotide-count/src/lib.rs | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/nucleotide-count/src/lib.rs b/nucleotide-count/src/lib.rs new file mode 100644 index 0000000..98b0c38 --- /dev/null +++ b/nucleotide-count/src/lib.rs | |||
| @@ -0,0 +1,21 @@ | |||
| 1 | use maplit::hashmap; | ||
| 2 | use std::collections::HashMap; | ||
| 3 | |||
| 4 | pub fn count(nucleotide: char, dna: &str) -> Result<usize, char> { | ||
| 5 | nucleotide_counts(dna)? | ||
| 6 | .remove(&nucleotide) | ||
| 7 | .ok_or(nucleotide) | ||
| 8 | } | ||
| 9 | |||
| 10 | pub fn nucleotide_counts(dna: &str) -> Result<HashMap<char, usize>, char> { | ||
| 11 | dna.chars().fold( | ||
| 12 | Ok(hashmap![ 'A' => 0, 'C' => 0, 'G' => 0, 'T' => 0 ]), | ||
| 13 | |acc, n| match n { | ||
| 14 | 'A' | 'C' | 'G' | 'T' => acc.map(|mut hmap| { | ||
| 15 | hmap.entry(n).and_modify(|e| *e += 1).or_insert(0); | ||
| 16 | hmap | ||
| 17 | }), | ||
| 18 | _ => Err(n), | ||
| 19 | }, | ||
| 20 | ) | ||
| 21 | } | ||
