From 68d2ef182359b646893972622a9ee2251b9416c6 Mon Sep 17 00:00:00 2001 From: retoor Date: Sun, 1 Dec 2024 23:23:32 +0100 Subject: [PATCH] New version rust. --- 12bitfloat_rust/risspam/Cargo.toml | 4 + 12bitfloat_rust/risspam/src/main.rs | 117 ++++++++++++++++------------ 2 files changed, 72 insertions(+), 49 deletions(-) diff --git a/12bitfloat_rust/risspam/Cargo.toml b/12bitfloat_rust/risspam/Cargo.toml index 19d72cc..dd6c69e 100644 --- a/12bitfloat_rust/risspam/Cargo.toml +++ b/12bitfloat_rust/risspam/Cargo.toml @@ -5,3 +5,7 @@ edition = "2021" [dependencies] rayon = "1.10.0" + +[profile.release] +lto = "thin" +panic = "abort" diff --git a/12bitfloat_rust/risspam/src/main.rs b/12bitfloat_rust/risspam/src/main.rs index 395cea2..ad6bc58 100644 --- a/12bitfloat_rust/risspam/src/main.rs +++ b/12bitfloat_rust/risspam/src/main.rs @@ -14,21 +14,36 @@ fn clean_content(content: &str) -> String { clean_content } -fn get_sentences(content: &str) -> Vec<&str> { - let mut sentences = content.split('.') +fn get_sentences(content: &str) -> usize { + let sentences = content.split('.') .map(|s| s.trim_start()) // Remove leading whitespace - .collect::>(); + .count(); - // Remove last "sentence" if didn't end with a dot - if let Some(last) = sentences.last() && !last.ends_with('.') { - sentences.pop(); - } +// // Remove last "sentence" if didn't end with a dot +// if let Some(last) = sentences.last() && !last.ends_with('.') { +// sentences.pop(); +// } sentences } -fn get_words(sentences: &str) -> impl Iterator + Clone { - sentences.split_whitespace() +fn get_words(content: &str, words: &mut usize, caps: &mut usize, fw: &mut usize) { + fn check_forbidden(w: &str) -> bool { + FORBIDDEN_WORDS.iter() + .find(|fw| str::eq_ignore_ascii_case(w, fw)) + .is_some() + } + + for word in content.split_whitespace() { + *words += 1; + + if is_fully_capitalized_word(word) { + *caps += 1; + } + if check_forbidden(word) { + *fw += 1; + } + } } fn is_fully_capitalized_word(word: &str) -> bool { @@ -36,65 +51,68 @@ fn is_fully_capitalized_word(word: &str) -> bool { .all(|c| !c.is_ascii_alphanumeric() || c.is_ascii_uppercase()) } -fn get_capitalized_words(content: &str) -> Vec<&str> { - let sentences = get_sentences(content); - let mut cap_words = vec![]; - - for sentence in sentences { - // Always skip the first word since sentences start with - for word in get_words(sentence).skip(1) { - if is_fully_capitalized_word(word) { - cap_words.push(word); - } - } - } - - cap_words +//fn get_capitalized_words(content: &str) -> usize { +// let sentences = get_sentences(content); +//// let mut cap_words = vec![]; +// let mut count = 0; +// +// for sentence in sentences { +// // Always skip the first word since sentences start with +// for word in get_words(sentence).skip(1) { +// if is_fully_capitalized_word(word) { +// count += 1; +// } +// } +// } +// +// count +//} + +fn get_numbers(clean_content: &str) -> usize { + clean_content.split(|c: char| !c.is_ascii_digit()) + .count() } -fn get_numbers(clean_content: &str) -> Vec<&str> { - clean_content.split(|c: char| c.is_ascii_digit()) - .collect() -} - -fn get_forbidden_words(content: &str) -> Vec<&str> { - fn check_forbidden(w: &str) -> bool { - FORBIDDEN_WORDS.iter() - .find(|fw| str::eq_ignore_ascii_case(w, fw)) - .is_some() - } - - get_words(content) - .filter(|w| check_forbidden(w)) - .collect() -} +//fn get_forbidden_words(content: &str) -> usize { +// fn check_forbidden(w: &str) -> bool { +// FORBIDDEN_WORDS.iter() +// .find(|fw| str::eq_ignore_ascii_case(w, fw)) +// .is_some() +// } +// +// get_words(content) +// .filter(|w| check_forbidden(w)) +// .collect() +//} fn analyze(data: &str) { let clean_data = clean_content(data); // drop(clean_data); // You aren't actually using clean_data :O // All capitalized words - let cap_words = get_capitalized_words(data); - println!("All capitalized words: {}", cap_words.len()); + let mut words = 0; + let mut fw = 0; + let mut cap_words = 0; + get_words(&clean_data, &mut words, &mut fw, &mut cap_words); + + println!("All capitalized words: {}", cap_words); // All sentences let sentences = get_sentences(data); - println!("Sentences: {}", sentences.len()); + println!("Sentences: {}", sentences); // All words - let words = get_words(data); - println!("Words: {}", words.clone().count()); + println!("Words: {}", words); // Numbers let numbers = get_numbers(&clean_data); - println!("Numbers: {}", numbers.len()); + println!("Numbers: {}", numbers); // Forbidden words - let fw = get_forbidden_words(data); - println!("Forbidden words: {}", fw.len()); + println!("Forbidden words: {}", fw); - if sentences.len() > 0 { - let word_count_per_sentence = words.count() / sentences.len(); + if sentences > 0 { + let word_count_per_sentence = words / sentences; println!("Word count per sentence: {}", word_count_per_sentence); } } @@ -136,3 +154,4 @@ static FORBIDDEN_WORDS: &'static [&'static str] = &[ "transaction", "essential", "managing", "contact", "contacting", "understanding", "assets", "funds" ]; +