PRTM
This commit is contained in:
parent
8f8f35f06f
commit
acb5c8976e
@ -6,6 +6,7 @@ use utils::run_solution;
|
||||
#[derive(clap::ValueEnum, Clone, Debug)]
|
||||
enum Problem {
|
||||
REVP,
|
||||
PRTM,
|
||||
}
|
||||
|
||||
#[derive(Parser, Debug)]
|
||||
|
@ -1,2 +1,4 @@
|
||||
mod prtm;
|
||||
mod revp;
|
||||
pub use prtm::prtm;
|
||||
pub use revp::revp;
|
||||
|
32
rust/src/solutions/prtm.rs
Normal file
32
rust/src/solutions/prtm.rs
Normal file
@ -0,0 +1,32 @@
|
||||
use crate::utils::AMINO_ACID_MASS_TABLE;
|
||||
use std::collections::HashMap;
|
||||
|
||||
pub fn prtm(file_content: String) -> String {
|
||||
let mut out_mass = 0.0;
|
||||
let mass_map: HashMap<char, f64> = AMINO_ACID_MASS_TABLE.iter().cloned().collect();
|
||||
for aa in file_content.trim().chars() {
|
||||
out_mass += mass_map
|
||||
.get(&aa)
|
||||
.expect("The given letter was not in the map");
|
||||
}
|
||||
// rounds to 3 decimal places
|
||||
return ((out_mass * 1000.0).round() / 1000.0).to_string();
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test_prtm() {
|
||||
let input_content = "SKADYEK".to_string();
|
||||
let expected = "821.392";
|
||||
assert_eq!(prtm(input_content), expected);
|
||||
}
|
||||
#[test]
|
||||
fn test_prtm_float64() {
|
||||
let input_content = "DVMPGSWEYQNMGDENESNPGQTQHYCIDWAGWRDTHPNCPQMPEFSISGPPYIAKRPSCKISPMDKLTATYWEAHAFNARVLKSNCMWQCPMLMNHMQNAQCCGFGRWECAWMTAINQGSFDYARFGFYTATINASFILCTDWIMVVWSRPSARVSKRWHYDPQSGAYSRENCYVHNYLPHDQNRCIYGNFQTFHGTFCVRGPSSVNTADWWTQRCYMPHQQMLVQPSRMWYTGARPHPRWTHRHNHIRFWWGCHKVCYKWIRGNDIHCHKFTYVVNGSGKATGCEALCNEWQTWGHRFQLESGYRQMCANRCSNRKEHYICDVCGRYFVNYVSFRLLLMKPDDMYETGDIFEGLSIYGTNHKGIVPLWPIMHRMAIKTKTAACEFQGTEKQPVTKVDSNRWCMNGWEQPITTMIQVGLSMGYVRWVCMAGPTSQPQAGGNFPEHPVMQCQKVRQECVLCPMSGRMEPWRTDFGDHNGMDIKVMNNFQPMCISTGTIMLNDPCMSIVDKSAEYCYTWFFVDFWKWYAVPNIIDREWGCCCNNSCEKDYRSRAKADTHHVCSVYFQTVNSRFRPARENYKHTGFRMLQRLPIHNTAAANDMVYLVHMMIRHFFPLLHKPCDETGPHNGKIKWFWLCGDINWARSSDSYIRWLNNYMWFMSERMVNWRFIEKDNQVFDAYRASAWFVGWVLWRQDGFACGHCQLECRHTFAMDEMSHGGIYWNRPVQLVEARGPHCMRLHHLQQGFILIWDFMNDLGQRKDFGCSTHGYGFNYNNFQHIDAWTMYTFTEASNFCTITAHDDADLLPHHCRPRGKCGVTNCKQNALIIATPLRYILHRVTVTCIGLQVQCRCTDGIMDENFALCMVIIHLLNYYHTNAFRRLKTHNENSSKPDNWCNNRGGHMCMKTTRVMETKWLEATLW".to_string();
|
||||
let expected = "107861.254";
|
||||
assert_eq!(prtm(input_content), expected);
|
||||
}
|
||||
}
|
@ -1,6 +1,29 @@
|
||||
use crate::{solutions, Problem};
|
||||
use std::{fs, io};
|
||||
|
||||
pub const AMINO_ACID_MASS_TABLE: [(char, f64); 20] = [
|
||||
('A', 71.03711),
|
||||
('C', 103.00919),
|
||||
('D', 115.02694),
|
||||
('E', 129.04259),
|
||||
('F', 147.06841),
|
||||
('G', 57.02146),
|
||||
('H', 137.05891),
|
||||
('I', 113.08406),
|
||||
('K', 128.09496),
|
||||
('L', 113.08406),
|
||||
('M', 131.04049),
|
||||
('N', 114.04293),
|
||||
('P', 97.05276),
|
||||
('Q', 128.05858),
|
||||
('R', 156.10111),
|
||||
('S', 87.03203),
|
||||
('T', 101.04768),
|
||||
('V', 99.06841),
|
||||
('W', 186.07931),
|
||||
('Y', 163.06333),
|
||||
];
|
||||
|
||||
pub struct FastaRecord {
|
||||
pub id: String,
|
||||
pub sequence: String,
|
||||
@ -11,6 +34,7 @@ pub fn run_solution(problem: Problem, in_file: &String, out_file: &String) {
|
||||
let solution: io::Result<String> = match fs::read_to_string(in_file) {
|
||||
Ok(content) => match problem {
|
||||
Problem::REVP => Ok(solutions::revp(content)),
|
||||
Problem::PRTM => Ok(solutions::prtm(content)),
|
||||
},
|
||||
Err(e) => Err(e),
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user