Es 01 Anagram

This commit is contained in:
2024-04-30 19:07:25 +02:00
parent 8fe7754375
commit 20978d583c
4 changed files with 55 additions and 0 deletions

11
Cargo.toml Normal file
View File

@@ -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"] }

19
src/es01_anagram.rs Normal file
View File

@@ -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 dellaltra 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)
}
}

1
src/lib.rs Normal file
View File

@@ -0,0 +1 @@
pub mod es01_anagram;

24
tests/es01_anagram.rs Normal file
View File

@@ -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);
}