diff --git a/ejercicios/reto09/Cargo.toml b/ejercicios/reto09/Cargo.toml new file mode 100644 index 0000000..f2be8a3 --- /dev/null +++ b/ejercicios/reto09/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "reto09" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/ejercicios/reto09/src/main.rs b/ejercicios/reto09/src/main.rs new file mode 100644 index 0000000..b4c4a22 --- /dev/null +++ b/ejercicios/reto09/src/main.rs @@ -0,0 +1,78 @@ +/* + * Crea 3 funciones, cada una encargada de detectar si una cadena de + * texto es un heterograma, un isograma o un pangrama. + * - Debes buscar la definición de cada uno de estos términos. + * Heterograma: un conjunto de caracteres que no se repiten. + * Isograma: palabra sin letras repetidas (como ambidiestramente ) o, más ampliamente, una palabra en la que las letras aparecen el mismo número de veces. + * Pangrama: texto que contiene todas las letras del abecedario. Tengo un libro de papiroflexia sobre las hazañas y aventuras de Don Quijote de la Mancha en Kuwait. + */ + +fn esheterograma(cadena: &str) -> bool { + let vectorcadena: Vec = cadena.chars().collect(); + let mut vectorvacio: Vec = vec![]; + for letra in vectorcadena.iter() { + if vectorvacio.contains(letra) { + return false; + } else { + vectorvacio.push(*letra); + } + } + return true; +} + +fn esisograma(cadena: &str) -> bool { + let vectorcadena: Vec = cadena.chars().collect(); + let mut vectorcadenasinrepetir: Vec = vec![]; + let mut vectorvacio: Vec = vec![]; + for letra in vectorcadena.iter() { + if !vectorcadenasinrepetir.contains(letra) { + // si no está se le añade un 1 al vector de numeros + vectorcadenasinrepetir.push(*letra); + vectorvacio.push(1); + } else { + // si está hay que buscarla y sumarle un 1 al vector de numeros + let index = vectorcadenasinrepetir + .iter() + .enumerate() + .find(|&r| r.1.to_string() == letra.to_string()) + .unwrap() + .0; + vectorvacio[index] += 1; + } + } + for i in vectorvacio.iter() { + if i != &vectorvacio[0] { + return false; + } + } + return true; +} + +fn espangrama(cadena: &str) -> bool { + let vectorcadena: Vec = cadena.chars().collect(); + let mut vectorabecedario: Vec = [ + 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'ñ', 'o', 'p', 'q', + 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', + ] + .to_vec(); + for letra in vectorcadena.iter() { + if !vectorabecedario.contains(letra) { + return false; + } else { + let index = vectorabecedario + .iter() + .enumerate() + .find(|&r| r.1.to_string() == letra.to_string()) + .unwrap() + .0; + vectorabecedario.remove(index); + } + } + return true; +} + +fn main() { + println!("{}", esheterograma("mis coj")); + println!("{}", esisograma("aabbccdgged")); + println!("{}", espangrama("abcdefghijklmnñopqrstuwxyza")); +}