From 20978d583cdaba84ff6e548abc9c23858163315f Mon Sep 17 00:00:00 2001 From: Berack96 Date: Tue, 30 Apr 2024 19:07:25 +0200 Subject: [PATCH] Es 01 Anagram --- Cargo.toml | 11 +++++++++++ src/es01_anagram.rs | 19 +++++++++++++++++++ src/lib.rs | 1 + tests/es01_anagram.rs | 24 ++++++++++++++++++++++++ 4 files changed, 55 insertions(+) create mode 100644 Cargo.toml create mode 100644 src/es01_anagram.rs create mode 100644 src/lib.rs create mode 100644 tests/es01_anagram.rs diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..4a20f91 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "esercizi" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +rand = "0.8.5" +rand_pcg = { version = "0.3.1", features = ["serde1"] } +serde = { version = "1.0.197", features = ["derive"] } diff --git a/src/es01_anagram.rs b/src/es01_anagram.rs new file mode 100644 index 0000000..4e2ae4a --- /dev/null +++ b/src/es01_anagram.rs @@ -0,0 +1,19 @@ +#![allow(dead_code)] + +use std::collections::HashMap; + +/** Es.1 + * Scrivere una funzione che prende in input due riferimenti a stringhe e ritorna + * true se le stringhe con anagramma una dell’altra e false altrimenti. + */ +pub fn anagrammi(str1: &str, str2: &str) -> bool { + if str1.len() != str2.len() { + false + } else { + let mut map = HashMap::new(); + + str1.chars().for_each(|x| *map.entry(x).or_insert(0) += 1); + str2.chars().for_each(|x| *map.entry(x).or_insert(0) -= 1); + map.iter().all(|(_, x)| *x == 0) + } +} diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..5015d3a --- /dev/null +++ b/src/lib.rs @@ -0,0 +1 @@ +pub mod es01_anagram; diff --git a/tests/es01_anagram.rs b/tests/es01_anagram.rs new file mode 100644 index 0000000..9a1272a --- /dev/null +++ b/tests/es01_anagram.rs @@ -0,0 +1,24 @@ +use esercizi::es01_anagram::anagrammi; + +#[test] +fn test_anagrammi() { + assert_eq!(anagrammi("ciao", "ciaq"), false); + assert_eq!(anagrammi("anna", "nana"), true); + assert_eq!( + anagrammi( + "fhgsdlifgdsiulfsdkjhvldshvlidhfksdhlvuidxhljfkshlkseghlif", + "fiisslfhkgjshsiflvdghdughdhddfiflljhksvklxhhusfildkevllds" + ), + true + ); + assert_eq!( + anagrammi( + "fhgsdlifgdsiulfsdkjhvldsqsvlidhfksdhlvuidxhljfkshlkseghlif", + "fiisslfhkgjshsiflvdghdughdhddfiflljhksvklxhhusfildkevllds" + ), + false + ); + assert_eq!(anagrammi("bububububub", "fsdfgaiholka"), false); + assert_eq!(anagrammi("baubau", "baubua"), true); + assert_eq!(anagrammi("baubab", "baubb"), false); +}