From 1e99cbbb85ba615da421e214b971d06d812460ec Mon Sep 17 00:00:00 2001 From: fabolous005 Date: Sat, 18 Nov 2023 18:15:57 +0100 Subject: [PATCH] handle single and double chars seperatly --- src/main.rs | 285 +++++++++++++++++++++++++++++----------------------- 1 file changed, 159 insertions(+), 126 deletions(-) diff --git a/src/main.rs b/src/main.rs index ab85e6e..3e4e63f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,5 +1,7 @@ +#![allow(clippy::unnecessary_unwrap)] + use std::env; -use periodic_table::{periodic_table, Element}; +use periodic_table::Element; fn main() { let mut args = vec![]; @@ -8,131 +10,162 @@ fn main() { } println!("{:?}", args); - let elements = args[1].to_string().to_uppercase(); - let element = elements.as_str(); + let mut char_before: Option = None; + let mut element: Option<&Element> = None; + let mut element_line: Vec<&Element> = vec![]; // TODO: this should also include the number of atoms - println!("{element}"); + let input = args[1].to_string(); + for char in input.chars() { + println!("{:?}", element); + if element.is_some() { + println!("element is some"); + element_line.push(element.unwrap()); + } + if char.is_ascii_alphabetic() { + println!("matched alphabetic"); + if char_before.is_some() { + println!("char_before is some"); + let mut short = char_before.unwrap().to_uppercase().next().unwrap().to_string(); + short.push(char.to_uppercase().next().unwrap()); + element = match short.as_str() { + "AC" => Some(&periodic_table::elements::AC), + "AG" => Some(&periodic_table::elements::AG), + "AL" => Some(&periodic_table::elements::AL), + "AM" => Some(&periodic_table::elements::AM), + "AR" => Some(&periodic_table::elements::AR), + "AS" => Some(&periodic_table::elements::AS), + "AT" => Some(&periodic_table::elements::AT), + "AU" => Some(&periodic_table::elements::AU), + "BA" => Some(&periodic_table::elements::BA), + "BE" => Some(&periodic_table::elements::BE), + "BH" => Some(&periodic_table::elements::BH), + "BI" => Some(&periodic_table::elements::BI), + "BK" => Some(&periodic_table::elements::BK), + "BR" => Some(&periodic_table::elements::BR), + "CA" => Some(&periodic_table::elements::CA), + "CD" => Some(&periodic_table::elements::CD), + "CE" => Some(&periodic_table::elements::CE), + "CF" => Some(&periodic_table::elements::CF), + "CL" => Some(&periodic_table::elements::CL), + "CM" => Some(&periodic_table::elements::CM), + "CN" => Some(&periodic_table::elements::CN), + "CO" => Some(&periodic_table::elements::CO), + "CR" => Some(&periodic_table::elements::CR), + "CS" => Some(&periodic_table::elements::CS), + "CU" => Some(&periodic_table::elements::CU), + "DB" => Some(&periodic_table::elements::DB), + "DS" => Some(&periodic_table::elements::DS), + "DY" => Some(&periodic_table::elements::DY), + "ER" => Some(&periodic_table::elements::ER), + "ES" => Some(&periodic_table::elements::ES), + "EU" => Some(&periodic_table::elements::EU), + "FE" => Some(&periodic_table::elements::FE), + "FL" => Some(&periodic_table::elements::FL), + "FM" => Some(&periodic_table::elements::FM), + "FR" => Some(&periodic_table::elements::FR), + "GA" => Some(&periodic_table::elements::GA), + "GD" => Some(&periodic_table::elements::GD), + "GE" => Some(&periodic_table::elements::GE), + "HE" => Some(&periodic_table::elements::HE), + "HF" => Some(&periodic_table::elements::HF), + "HG" => Some(&periodic_table::elements::HG), + "HO" => Some(&periodic_table::elements::HO), + "HS" => Some(&periodic_table::elements::HS), + "IN" => Some(&periodic_table::elements::IN), + "IR" => Some(&periodic_table::elements::IR), + "KR" => Some(&periodic_table::elements::KR), + "LA" => Some(&periodic_table::elements::LA), + "LI" => Some(&periodic_table::elements::LI), + "LR" => Some(&periodic_table::elements::LR), + "LU" => Some(&periodic_table::elements::LU), + "LV" => Some(&periodic_table::elements::LV), + "MC" => Some(&periodic_table::elements::MC), + "MD" => Some(&periodic_table::elements::MD), + "MG" => Some(&periodic_table::elements::MG), + "MN" => Some(&periodic_table::elements::MN), + "MO" => Some(&periodic_table::elements::MO), + "MT" => Some(&periodic_table::elements::MT), + "NA" => Some(&periodic_table::elements::NA), + "NB" => Some(&periodic_table::elements::NB), + "ND" => Some(&periodic_table::elements::ND), + "NE" => Some(&periodic_table::elements::NE), + "NH" => Some(&periodic_table::elements::NH), + "NI" => Some(&periodic_table::elements::NI), + "NO" => Some(&periodic_table::elements::NO), + "NP" => Some(&periodic_table::elements::NP), + "OG" => Some(&periodic_table::elements::OG), + "OS" => Some(&periodic_table::elements::OS), + "PA" => Some(&periodic_table::elements::PA), + "PB" => Some(&periodic_table::elements::PB), + "PD" => Some(&periodic_table::elements::PD), + "PM" => Some(&periodic_table::elements::PM), + "PO" => Some(&periodic_table::elements::PO), + "PR" => Some(&periodic_table::elements::PR), + "PT" => Some(&periodic_table::elements::PT), + "PU" => Some(&periodic_table::elements::PU), + "RA" => Some(&periodic_table::elements::RA), + "RB" => Some(&periodic_table::elements::RB), + "RE" => Some(&periodic_table::elements::RE), + "RF" => Some(&periodic_table::elements::RF), + "RG" => Some(&periodic_table::elements::RG), + "RH" => Some(&periodic_table::elements::RH), + "RN" => Some(&periodic_table::elements::RN), + "RU" => Some(&periodic_table::elements::RU), + "SB" => Some(&periodic_table::elements::SB), + "SC" => Some(&periodic_table::elements::SC), + "SE" => Some(&periodic_table::elements::SE), + "SG" => Some(&periodic_table::elements::SG), + "SI" => Some(&periodic_table::elements::SI), + "SM" => Some(&periodic_table::elements::SM), + "SN" => Some(&periodic_table::elements::SN), + "SR" => Some(&periodic_table::elements::SR), + "TA" => Some(&periodic_table::elements::TA), + "TB" => Some(&periodic_table::elements::TB), + "TC" => Some(&periodic_table::elements::TC), + "TE" => Some(&periodic_table::elements::TE), + "TH" => Some(&periodic_table::elements::TH), + "TI" => Some(&periodic_table::elements::TI), + "TL" => Some(&periodic_table::elements::TL), + "TM" => Some(&periodic_table::elements::TM), + "TS" => Some(&periodic_table::elements::TS), + "XE" => Some(&periodic_table::elements::XE), + "YB" => Some(&periodic_table::elements::YB), + "ZN" => Some(&periodic_table::elements::ZN), + "ZR" => Some(&periodic_table::elements::ZR), + _ => panic!("Could not find element") + }; + char_before = None; + } else { + println!("char_before is none"); + element = match char.to_uppercase().next().unwrap() { + 'B' => Some(&periodic_table::elements::B), + 'C' => Some(&periodic_table::elements::C), + 'F' => Some(&periodic_table::elements::F), + 'H' => Some(&periodic_table::elements::H), + 'I' => Some(&periodic_table::elements::I), + 'K' => Some(&periodic_table::elements::K), + 'N' => Some(&periodic_table::elements::N), + 'O' => Some(&periodic_table::elements::O), + 'P' => Some(&periodic_table::elements::P), + 'S' => Some(&periodic_table::elements::S), + 'U' => Some(&periodic_table::elements::U), + 'V' => Some(&periodic_table::elements::V), + 'W' => Some(&periodic_table::elements::W), + 'Y' => Some(&periodic_table::elements::Y), + _ => None + }; + if element.is_none() { + char_before = Some(char); + } + } + } else if char.is_ascii_digit() { + println!("matched ascii digit"); + todo!(); + } + } + if element.is_some() { + element_line.push(element.unwrap()); + } - let element_info = match element { - "AC" => &periodic_table::elements::AC, - "AG" => &periodic_table::elements::AG, - "AL" => &periodic_table::elements::AL, - "AM" => &periodic_table::elements::AM, - "AR" => &periodic_table::elements::AR, - "AS" => &periodic_table::elements::AS, - "AT" => &periodic_table::elements::AT, - "AU" => &periodic_table::elements::AU, - "B" => &periodic_table::elements::B, - "BA" => &periodic_table::elements::BA, - "BE" => &periodic_table::elements::BE, - "BH" => &periodic_table::elements::BH, - "BI" => &periodic_table::elements::BI, - "BK" => &periodic_table::elements::BK, - "BR" => &periodic_table::elements::BR, - "C" => &periodic_table::elements::C, - "CA" => &periodic_table::elements::CA, - "CD" => &periodic_table::elements::CD, - "CE" => &periodic_table::elements::CE, - "CF" => &periodic_table::elements::CF, - "CL" => &periodic_table::elements::CL, - "CM" => &periodic_table::elements::CM, - "CN" => &periodic_table::elements::CN, - "CO" => &periodic_table::elements::CO, - "CR" => &periodic_table::elements::CR, - "CS" => &periodic_table::elements::CS, - "CU" => &periodic_table::elements::CU, - "DB" => &periodic_table::elements::DB, - "DS" => &periodic_table::elements::DS, - "DY" => &periodic_table::elements::DY, - "ER" => &periodic_table::elements::ER, - "ES" => &periodic_table::elements::ES, - "EU" => &periodic_table::elements::EU, - "F" => &periodic_table::elements::F, - "FE" => &periodic_table::elements::FE, - "FL" => &periodic_table::elements::FL, - "FM" => &periodic_table::elements::FM, - "FR" => &periodic_table::elements::FR, - "GA" => &periodic_table::elements::GA, - "GD" => &periodic_table::elements::GD, - "GE" => &periodic_table::elements::GE, - "H" => &periodic_table::elements::H, - "HE" => &periodic_table::elements::HE, - "HF" => &periodic_table::elements::HF, - "HG" => &periodic_table::elements::HG, - "HO" => &periodic_table::elements::HO, - "HS" => &periodic_table::elements::HS, - "I" => &periodic_table::elements::I, - "IN" => &periodic_table::elements::IN, - "IR" => &periodic_table::elements::IR, - "K" => &periodic_table::elements::K, - "KR" => &periodic_table::elements::KR, - "LA" => &periodic_table::elements::LA, - "LI" => &periodic_table::elements::LI, - "LR" => &periodic_table::elements::LR, - "LU" => &periodic_table::elements::LU, - "LV" => &periodic_table::elements::LV, - "MC" => &periodic_table::elements::MC, - "MD" => &periodic_table::elements::MD, - "MG" => &periodic_table::elements::MG, - "MN" => &periodic_table::elements::MN, - "MO" => &periodic_table::elements::MO, - "MT" => &periodic_table::elements::MT, - "N" => &periodic_table::elements::N, - "NA" => &periodic_table::elements::NA, - "NB" => &periodic_table::elements::NB, - "ND" => &periodic_table::elements::ND, - "NE" => &periodic_table::elements::NE, - "NH" => &periodic_table::elements::NH, - "NI" => &periodic_table::elements::NI, - "NO" => &periodic_table::elements::NO, - "NP" => &periodic_table::elements::NP, - "O" => &periodic_table::elements::O, - "OG" => &periodic_table::elements::OG, - "OS" => &periodic_table::elements::OS, - "P" => &periodic_table::elements::P, - "PA" => &periodic_table::elements::PA, - "PB" => &periodic_table::elements::PB, - "PD" => &periodic_table::elements::PD, - "PM" => &periodic_table::elements::PM, - "PO" => &periodic_table::elements::PO, - "PR" => &periodic_table::elements::PR, - "PT" => &periodic_table::elements::PT, - "PU" => &periodic_table::elements::PU, - "RA" => &periodic_table::elements::RA, - "RB" => &periodic_table::elements::RB, - "RE" => &periodic_table::elements::RE, - "RF" => &periodic_table::elements::RF, - "RG" => &periodic_table::elements::RG, - "RH" => &periodic_table::elements::RH, - "RN" => &periodic_table::elements::RN, - "RU" => &periodic_table::elements::RU, - "S" => &periodic_table::elements::S, - "SB" => &periodic_table::elements::SB, - "SC" => &periodic_table::elements::SC, - "SE" => &periodic_table::elements::SE, - "SG" => &periodic_table::elements::SG, - "SI" => &periodic_table::elements::SI, - "SM" => &periodic_table::elements::SM, - "SN" => &periodic_table::elements::SN, - "SR" => &periodic_table::elements::SR, - "TA" => &periodic_table::elements::TA, - "TB" => &periodic_table::elements::TB, - "TC" => &periodic_table::elements::TC, - "TE" => &periodic_table::elements::TE, - "TH" => &periodic_table::elements::TH, - "TI" => &periodic_table::elements::TI, - "TL" => &periodic_table::elements::TL, - "TM" => &periodic_table::elements::TM, - "TS" => &periodic_table::elements::TS, - "U" => &periodic_table::elements::U, - "V" => &periodic_table::elements::V, - "W" => &periodic_table::elements::W, - "XE" => &periodic_table::elements::XE, - "Y" => &periodic_table::elements::Y, - "YB" => &periodic_table::elements::YB, - "ZN" => &periodic_table::elements::ZN, - "ZR" => &periodic_table::elements::ZR, - _ => { panic!("element not matched") } - }; - println!("{:?}", element_info); + println!("{:#?}", element_line); }