add digit validation

This commit is contained in:
fabolous005 2023-11-19 13:42:40 +01:00
parent 1b5135606b
commit 74f19d779d
2 changed files with 148 additions and 137 deletions

View File

@ -4,3 +4,4 @@ Calculate isomer for given Elements
FH will expand to Hafnium. FH will expand to Hafnium.
To use F1H1 write like this: F1H1 or F1H To use F1H1 write like this: F1H1 or F1H

View File

@ -3,158 +3,161 @@
use std::env; use std::env;
use periodic_table::Element; use periodic_table::Element;
#[derive(Debug)]
struct ElementNr<'a> {
element : &'a Element,
nr : u32
}
fn main() { fn main() {
let mut args = vec![]; let mut args = vec![];
for argument in env::args() { for argument in env::args() {
args.push(argument); args.push(argument);
} }
println!("{:?}", args);
let mut char_before: Option<char> = None; let mut char_before: Option<char> = None;
let mut element: Option<&Element> = None; let mut element: Option<&Element> = None;
let mut element_line: Vec<&Element> = vec![]; // TODO: this should also include the number of atoms let mut element_line: Vec<ElementNr> = vec![];
let mut temp = false;
let input = args[1].to_string(); let input = args[1].to_string();
for char in input.chars() { for char in input.chars() {
println!(); println!();
if element.is_some() {
println!("element is some");
element_line.push(element.unwrap());
}
if char.is_ascii_alphabetic() { if char.is_ascii_alphabetic() {
println!("matched alphabetic"); // println!("matched alphabetic");
if char_before.is_some() { if char_before.is_some() {
println!("char_before is some"); // println!("char_before is {char_before:?}");
let mut short = char_before.unwrap().to_uppercase().next().unwrap().to_string(); let mut short = char_before.unwrap().to_uppercase().next().unwrap().to_string();
short.push(char.to_uppercase().next().unwrap()); short.push(char.to_uppercase().next().unwrap());
// println!("{}", short);
element = match short.as_str() { element = match short.as_str() {
"AC" => { element_line.pop(); Some(&periodic_table::elements::AC) }, "AC" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::AC) },
"AG" => { element_line.pop(); Some(&periodic_table::elements::AG) }, "AG" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::AG) },
"AL" => { element_line.pop(); Some(&periodic_table::elements::AL) }, "AL" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::AL) },
"AM" => { element_line.pop(); Some(&periodic_table::elements::AM) }, "AM" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::AM) },
"AR" => { element_line.pop(); Some(&periodic_table::elements::AR) }, "AR" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::AR) },
"AS" => { element_line.pop(); Some(&periodic_table::elements::AS) }, "AS" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::AS) },
"AT" => { element_line.pop(); Some(&periodic_table::elements::AT) }, "AT" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::AT) },
"AU" => { element_line.pop(); Some(&periodic_table::elements::AU) }, "AU" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::AU) },
"BA" => { element_line.pop(); Some(&periodic_table::elements::BA) }, "BA" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::BA) },
"BE" => { element_line.pop(); Some(&periodic_table::elements::BE) }, "BE" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::BE) },
"BH" => { element_line.pop(); Some(&periodic_table::elements::BH) }, "BH" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::BH) },
"BI" => { element_line.pop(); Some(&periodic_table::elements::BI) }, "BI" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::BI) },
"BK" => { element_line.pop(); Some(&periodic_table::elements::BK) }, "BK" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::BK) },
"BR" => { element_line.pop(); Some(&periodic_table::elements::BR) }, "BR" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::BR) },
"CA" => { element_line.pop(); Some(&periodic_table::elements::CA) }, "CA" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::CA) },
"CD" => { element_line.pop(); Some(&periodic_table::elements::CD) }, "CD" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::CD) },
"CE" => { element_line.pop(); Some(&periodic_table::elements::CE) }, "CE" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::CE) },
"CF" => { element_line.pop(); Some(&periodic_table::elements::CF) }, "CF" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::CF) },
"CL" => { element_line.pop(); Some(&periodic_table::elements::CL) }, "CL" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::CL) },
"CM" => { element_line.pop(); Some(&periodic_table::elements::CM) }, "CM" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::CM) },
"CN" => { element_line.pop(); Some(&periodic_table::elements::CN) }, "CN" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::CN) },
"CO" => { element_line.pop(); Some(&periodic_table::elements::CO) }, "CO" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::CO) },
"CR" => { element_line.pop(); Some(&periodic_table::elements::CR) }, "CR" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::CR) },
"CS" => { element_line.pop(); Some(&periodic_table::elements::CS) }, "CS" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::CS) },
"CU" => { element_line.pop(); Some(&periodic_table::elements::CU) }, "CU" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::CU) },
"DB" => { element_line.pop(); Some(&periodic_table::elements::DB) }, "DB" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::DB) },
"DS" => { element_line.pop(); Some(&periodic_table::elements::DS) }, "DS" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::DS) },
"DY" => { element_line.pop(); Some(&periodic_table::elements::DY) }, "DY" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::DY) },
"ER" => { element_line.pop(); Some(&periodic_table::elements::ER) }, "ER" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::ER) },
"ES" => { element_line.pop(); Some(&periodic_table::elements::ES) }, "ES" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::ES) },
"EU" => { element_line.pop(); Some(&periodic_table::elements::EU) }, "EU" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::EU) },
"FE" => { element_line.pop(); Some(&periodic_table::elements::FE) }, "FE" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::FE) },
"FL" => { element_line.pop(); Some(&periodic_table::elements::FL) }, "FL" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::FL) },
"FM" => { element_line.pop(); Some(&periodic_table::elements::FM) }, "FM" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::FM) },
"FR" => { element_line.pop(); Some(&periodic_table::elements::FR) }, "FR" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::FR) },
"GA" => { element_line.pop(); Some(&periodic_table::elements::GA) }, "GA" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::GA) },
"GD" => { element_line.pop(); Some(&periodic_table::elements::GD) }, "GD" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::GD) },
"GE" => { element_line.pop(); Some(&periodic_table::elements::GE) }, "GE" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::GE) },
"HE" => { element_line.pop(); Some(&periodic_table::elements::HE) }, "HE" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::HE) },
"HF" => { element_line.pop(); Some(&periodic_table::elements::HF) }, "HF" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::HF) },
"HG" => { element_line.pop(); Some(&periodic_table::elements::HG) }, "HG" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::HG) },
"HO" => { element_line.pop(); Some(&periodic_table::elements::HO) }, "HO" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::HO) },
"HS" => { element_line.pop(); Some(&periodic_table::elements::HS) }, "HS" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::HS) },
"IN" => { element_line.pop(); Some(&periodic_table::elements::IN) }, "IN" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::IN) },
"IR" => { element_line.pop(); Some(&periodic_table::elements::IR) }, "IR" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::IR) },
"KR" => { element_line.pop(); Some(&periodic_table::elements::KR) }, "KR" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::KR) },
"LA" => { element_line.pop(); Some(&periodic_table::elements::LA) }, "LA" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::LA) },
"LI" => { element_line.pop(); Some(&periodic_table::elements::LI) }, "LI" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::LI) },
"LR" => { element_line.pop(); Some(&periodic_table::elements::LR) }, "LR" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::LR) },
"LU" => { element_line.pop(); Some(&periodic_table::elements::LU) }, "LU" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::LU) },
"LV" => { element_line.pop(); Some(&periodic_table::elements::LV) }, "LV" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::LV) },
"MC" => { element_line.pop(); Some(&periodic_table::elements::MC) }, "MC" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::MC) },
"MD" => { element_line.pop(); Some(&periodic_table::elements::MD) }, "MD" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::MD) },
"MG" => { element_line.pop(); Some(&periodic_table::elements::MG) }, "MG" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::MG) },
"MN" => { element_line.pop(); Some(&periodic_table::elements::MN) }, "MN" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::MN) },
"MO" => { element_line.pop(); Some(&periodic_table::elements::MO) }, "MO" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::MO) },
"MT" => { element_line.pop(); Some(&periodic_table::elements::MT) }, "MT" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::MT) },
"NA" => { element_line.pop(); Some(&periodic_table::elements::NA) }, "NA" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::NA) },
"NB" => { element_line.pop(); Some(&periodic_table::elements::NB) }, "NB" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::NB) },
"ND" => { element_line.pop(); Some(&periodic_table::elements::ND) }, "ND" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::ND) },
"NE" => { element_line.pop(); Some(&periodic_table::elements::NE) }, "NE" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::NE) },
"NH" => { element_line.pop(); Some(&periodic_table::elements::NH) }, "NH" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::NH) },
"NI" => { element_line.pop(); Some(&periodic_table::elements::NI) }, "NI" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::NI) },
"NO" => { element_line.pop(); Some(&periodic_table::elements::NO) }, "NO" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::NO) },
"NP" => { element_line.pop(); Some(&periodic_table::elements::NP) }, "NP" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::NP) },
"OG" => { element_line.pop(); Some(&periodic_table::elements::OG) }, "OG" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::OG) },
"OS" => { element_line.pop(); Some(&periodic_table::elements::OS) }, "OS" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::OS) },
"PA" => { element_line.pop(); Some(&periodic_table::elements::PA) }, "PA" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::PA) },
"PB" => { element_line.pop(); Some(&periodic_table::elements::PB) }, "PB" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::PB) },
"PD" => { element_line.pop(); Some(&periodic_table::elements::PD) }, "PD" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::PD) },
"PM" => { element_line.pop(); Some(&periodic_table::elements::PM) }, "PM" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::PM) },
"PO" => { element_line.pop(); Some(&periodic_table::elements::PO) }, "PO" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::PO) },
"PR" => { element_line.pop(); Some(&periodic_table::elements::PR) }, "PR" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::PR) },
"PT" => { element_line.pop(); Some(&periodic_table::elements::PT) }, "PT" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::PT) },
"PU" => { element_line.pop(); Some(&periodic_table::elements::PU) }, "PU" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::PU) },
"RA" => { element_line.pop(); Some(&periodic_table::elements::RA) }, "RA" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::RA) },
"RB" => { element_line.pop(); Some(&periodic_table::elements::RB) }, "RB" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::RB) },
"RE" => { element_line.pop(); Some(&periodic_table::elements::RE) }, "RE" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::RE) },
"RF" => { element_line.pop(); Some(&periodic_table::elements::RF) }, "RF" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::RF) },
"RG" => { element_line.pop(); Some(&periodic_table::elements::RG) }, "RG" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::RG) },
"RH" => { element_line.pop(); Some(&periodic_table::elements::RH) }, "RH" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::RH) },
"RN" => { element_line.pop(); Some(&periodic_table::elements::RN) }, "RN" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::RN) },
"RU" => { element_line.pop(); Some(&periodic_table::elements::RU) }, "RU" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::RU) },
"SB" => { element_line.pop(); Some(&periodic_table::elements::SB) }, "SB" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::SB) },
"SC" => { element_line.pop(); Some(&periodic_table::elements::SC) }, "SC" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::SC) },
"SE" => { element_line.pop(); Some(&periodic_table::elements::SE) }, "SE" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::SE) },
"SG" => { element_line.pop(); Some(&periodic_table::elements::SG) }, "SG" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::SG) },
"SI" => { element_line.pop(); Some(&periodic_table::elements::SI) }, "SI" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::SI) },
"SM" => { element_line.pop(); Some(&periodic_table::elements::SM) }, "SM" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::SM) },
"SN" => { element_line.pop(); Some(&periodic_table::elements::SN) }, "SN" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::SN) },
"SR" => { element_line.pop(); Some(&periodic_table::elements::SR) }, "SR" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::SR) },
"TA" => { element_line.pop(); Some(&periodic_table::elements::TA) }, "TA" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::TA) },
"TB" => { element_line.pop(); Some(&periodic_table::elements::TB) }, "TB" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::TB) },
"TC" => { element_line.pop(); Some(&periodic_table::elements::TC) }, "TC" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::TC) },
"TE" => { element_line.pop(); Some(&periodic_table::elements::TE) }, "TE" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::TE) },
"TH" => { element_line.pop(); Some(&periodic_table::elements::TH) }, "TH" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::TH) },
"TI" => { element_line.pop(); Some(&periodic_table::elements::TI) }, "TI" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::TI) },
"TL" => { element_line.pop(); Some(&periodic_table::elements::TL) }, "TL" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::TL) },
"TM" => { element_line.pop(); Some(&periodic_table::elements::TM) }, "TM" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::TM) },
"TS" => { element_line.pop(); Some(&periodic_table::elements::TS) }, "TS" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::TS) },
"XE" => { element_line.pop(); Some(&periodic_table::elements::XE) }, "XE" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::XE) },
"YB" => { element_line.pop(); Some(&periodic_table::elements::YB) }, "YB" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::YB) },
"ZN" => { element_line.pop(); Some(&periodic_table::elements::ZN) }, "ZN" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::ZN) },
"ZR" => { element_line.pop(); Some(&periodic_table::elements::ZR) }, "ZR" => { if temp { element_line.pop(); } char_before = None; Some(&periodic_table::elements::ZR) },
_ => { _ => {
// println!("char is: {char}");
match char.to_uppercase().next().unwrap() { match char.to_uppercase().next().unwrap() {
'B' => Some(&periodic_table::elements::B), 'B' => { char_before = Some(char); Some(&periodic_table::elements::B) },
'C' => Some(&periodic_table::elements::C), 'C' => { char_before = Some(char); Some(&periodic_table::elements::C) },
'F' => Some(&periodic_table::elements::F), 'F' => { char_before = Some(char); Some(&periodic_table::elements::F) },
'H' => Some(&periodic_table::elements::H), 'H' => { char_before = Some(char); Some(&periodic_table::elements::H) },
'I' => Some(&periodic_table::elements::I), 'I' => { char_before = Some(char); Some(&periodic_table::elements::I) },
'K' => Some(&periodic_table::elements::K), 'K' => { char_before = Some(char); Some(&periodic_table::elements::K) },
'N' => Some(&periodic_table::elements::N), 'N' => { char_before = Some(char); Some(&periodic_table::elements::N) },
'O' => Some(&periodic_table::elements::O), 'O' => { char_before = Some(char); Some(&periodic_table::elements::O) },
'P' => Some(&periodic_table::elements::P), 'P' => { char_before = Some(char); Some(&periodic_table::elements::P) },
'S' => Some(&periodic_table::elements::S), 'S' => { char_before = Some(char); Some(&periodic_table::elements::S) },
'U' => Some(&periodic_table::elements::U), 'U' => { char_before = Some(char); Some(&periodic_table::elements::U) },
'V' => Some(&periodic_table::elements::V), 'V' => { char_before = Some(char); Some(&periodic_table::elements::V) },
'W' => Some(&periodic_table::elements::W), 'W' => { char_before = Some(char); Some(&periodic_table::elements::W) },
'Y' => Some(&periodic_table::elements::Y), 'Y' => { char_before = Some(char); Some(&periodic_table::elements::Y) },
_ => None _ => { char_before = Some(char); temp = false; None }
} }
} }
}; };
char_before = None;
} else { } else {
println!("char_before is none"); // println!("char_before is none");
element = match char.to_uppercase().next().unwrap() { element = match char.to_uppercase().next().unwrap() {
'B' => Some(&periodic_table::elements::B), 'B' => Some(&periodic_table::elements::B),
'C' => Some(&periodic_table::elements::C), 'C' => Some(&periodic_table::elements::C),
@ -172,17 +175,24 @@ fn main() {
'Y' => Some(&periodic_table::elements::Y), 'Y' => Some(&periodic_table::elements::Y),
_ => None _ => None
}; };
// if element.is_none() {
char_before = Some(char); char_before = Some(char);
// } temp = true
} }
} else if char.is_ascii_digit() { } else if char.is_ascii_digit() {
println!("matched ascii digit"); // println!("matched ascii digit");
todo!(); // println!("{char_before:?}");
if char_before.is_none() {
if char != '1' {
if let Some(last) = element_line.last_mut() {
last.nr = char.to_digit(10).unwrap();
} }
} }
if element.is_some() { }
element_line.push(element.unwrap()); char_before = None
}
if element.is_some() && char.is_ascii_alphabetic() {
element_line.push( ElementNr { element: element.unwrap(), nr: 1 });
}
} }
println!("{:#?}", element_line); println!("{:#?}", element_line);