From 3c4c9c54c98142f114018bbbe4d0d96d63646a5b Mon Sep 17 00:00:00 2001 From: mokou Date: Tue, 12 Jul 2022 15:18:05 +0200 Subject: feat: remove collections to hashmaps --- exercises/collections/README.md | 11 ------ exercises/collections/hashmap1.rs | 44 --------------------- exercises/collections/hashmap2.rs | 81 --------------------------------------- exercises/hashmaps/README.md | 11 ++++++ exercises/hashmaps/hashmaps1.rs | 44 +++++++++++++++++++++ exercises/hashmaps/hashmaps2.rs | 81 +++++++++++++++++++++++++++++++++++++++ 6 files changed, 136 insertions(+), 136 deletions(-) delete mode 100644 exercises/collections/README.md delete mode 100644 exercises/collections/hashmap1.rs delete mode 100644 exercises/collections/hashmap2.rs create mode 100644 exercises/hashmaps/README.md create mode 100644 exercises/hashmaps/hashmaps1.rs create mode 100644 exercises/hashmaps/hashmaps2.rs (limited to 'exercises') diff --git a/exercises/collections/README.md b/exercises/collections/README.md deleted file mode 100644 index 30471cf..0000000 --- a/exercises/collections/README.md +++ /dev/null @@ -1,11 +0,0 @@ -# Hashmaps -A *hash map* allows you to associate a value with a particular key. -You may also know this by the names [*unordered map* in C++](https://en.cppreference.com/w/cpp/container/unordered_map), -[*dictionary* in Python](https://docs.python.org/3/tutorial/datastructures.html#dictionaries) or an *associative array* in other languages. - -This is the other data structure that we've been talking about before, when -talking about Vecs. - -## Further information - -- [Storing Keys with Associated Values in Hash Maps](https://doc.rust-lang.org/book/ch08-03-hash-maps.html) diff --git a/exercises/collections/hashmap1.rs b/exercises/collections/hashmap1.rs deleted file mode 100644 index 64b5a7f..0000000 --- a/exercises/collections/hashmap1.rs +++ /dev/null @@ -1,44 +0,0 @@ -// hashmap1.rs -// A basket of fruits in the form of a hash map needs to be defined. -// The key represents the name of the fruit and the value represents -// how many of that particular fruit is in the basket. You have to put -// at least three different types of fruits (e.g apple, banana, mango) -// in the basket and the total count of all the fruits should be at -// least five. -// -// Make me compile and pass the tests! -// -// Execute the command `rustlings hint hashmap1` if you need -// hints. - -// I AM NOT DONE - -use std::collections::HashMap; - -fn fruit_basket() -> HashMap { - let mut basket = // TODO: declare your hash map here. - - // Two bananas are already given for you :) - basket.insert(String::from("banana"), 2); - - // TODO: Put more fruits in your basket here. - - basket -} - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn at_least_three_types_of_fruits() { - let basket = fruit_basket(); - assert!(basket.len() >= 3); - } - - #[test] - fn at_least_five_fruits() { - let basket = fruit_basket(); - assert!(basket.values().sum::() >= 5); - } -} diff --git a/exercises/collections/hashmap2.rs b/exercises/collections/hashmap2.rs deleted file mode 100644 index 0abe19a..0000000 --- a/exercises/collections/hashmap2.rs +++ /dev/null @@ -1,81 +0,0 @@ -// hashmap2.rs - -// A basket of fruits in the form of a hash map is given. The key -// represents the name of the fruit and the value represents how many -// of that particular fruit is in the basket. You have to put *MORE -// THAN 11* fruits in the basket. Three types of fruits - Apple (4), -// Mango (2) and Lychee (5) are already given in the basket. You are -// not allowed to insert any more of these fruits! -// -// Make me pass the tests! -// -// Execute the command `rustlings hint hashmap2` if you need -// hints. - -// I AM NOT DONE - -use std::collections::HashMap; - -#[derive(Hash, PartialEq, Eq)] -enum Fruit { - Apple, - Banana, - Mango, - Lychee, - Pineapple, -} - -fn fruit_basket(basket: &mut HashMap) { - let fruit_kinds = vec![ - Fruit::Apple, - Fruit::Banana, - Fruit::Mango, - Fruit::Lychee, - Fruit::Pineapple, - ]; - - for fruit in fruit_kinds { - // TODO: Put new fruits if not already present. Note that you - // are not allowed to put any type of fruit that's already - // present! - } -} - -#[cfg(test)] -mod tests { - use super::*; - - fn get_fruit_basket() -> HashMap { - let mut basket = HashMap::::new(); - basket.insert(Fruit::Apple, 4); - basket.insert(Fruit::Mango, 2); - basket.insert(Fruit::Lychee, 5); - - basket - } - - #[test] - fn test_given_fruits_are_not_modified() { - let mut basket = get_fruit_basket(); - fruit_basket(&mut basket); - assert_eq!(*basket.get(&Fruit::Apple).unwrap(), 4); - assert_eq!(*basket.get(&Fruit::Mango).unwrap(), 2); - assert_eq!(*basket.get(&Fruit::Lychee).unwrap(), 5); - } - - #[test] - fn at_least_five_types_of_fruits() { - let mut basket = get_fruit_basket(); - fruit_basket(&mut basket); - let count_fruit_kinds = basket.len(); - assert!(count_fruit_kinds >= 5); - } - - #[test] - fn greater_than_eleven_fruits() { - let mut basket = get_fruit_basket(); - fruit_basket(&mut basket); - let count = basket.values().sum::(); - assert!(count > 11); - } -} diff --git a/exercises/hashmaps/README.md b/exercises/hashmaps/README.md new file mode 100644 index 0000000..30471cf --- /dev/null +++ b/exercises/hashmaps/README.md @@ -0,0 +1,11 @@ +# Hashmaps +A *hash map* allows you to associate a value with a particular key. +You may also know this by the names [*unordered map* in C++](https://en.cppreference.com/w/cpp/container/unordered_map), +[*dictionary* in Python](https://docs.python.org/3/tutorial/datastructures.html#dictionaries) or an *associative array* in other languages. + +This is the other data structure that we've been talking about before, when +talking about Vecs. + +## Further information + +- [Storing Keys with Associated Values in Hash Maps](https://doc.rust-lang.org/book/ch08-03-hash-maps.html) diff --git a/exercises/hashmaps/hashmaps1.rs b/exercises/hashmaps/hashmaps1.rs new file mode 100644 index 0000000..26178b0 --- /dev/null +++ b/exercises/hashmaps/hashmaps1.rs @@ -0,0 +1,44 @@ +// hashmaps1.rs +// A basket of fruits in the form of a hash map needs to be defined. +// The key represents the name of the fruit and the value represents +// how many of that particular fruit is in the basket. You have to put +// at least three different types of fruits (e.g apple, banana, mango) +// in the basket and the total count of all the fruits should be at +// least five. +// +// Make me compile and pass the tests! +// +// Execute the command `rustlings hint hashmaps1` if you need +// hints. + +// I AM NOT DONE + +use std::collections::HashMap; + +fn fruit_basket() -> HashMap { + let mut basket = // TODO: declare your hash map here. + + // Two bananas are already given for you :) + basket.insert(String::from("banana"), 2); + + // TODO: Put more fruits in your basket here. + + basket +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn at_least_three_types_of_fruits() { + let basket = fruit_basket(); + assert!(basket.len() >= 3); + } + + #[test] + fn at_least_five_fruits() { + let basket = fruit_basket(); + assert!(basket.values().sum::() >= 5); + } +} diff --git a/exercises/hashmaps/hashmaps2.rs b/exercises/hashmaps/hashmaps2.rs new file mode 100644 index 0000000..1afb830 --- /dev/null +++ b/exercises/hashmaps/hashmaps2.rs @@ -0,0 +1,81 @@ +// hashmaps2.rs + +// A basket of fruits in the form of a hash map is given. The key +// represents the name of the fruit and the value represents how many +// of that particular fruit is in the basket. You have to put *MORE +// THAN 11* fruits in the basket. Three types of fruits - Apple (4), +// Mango (2) and Lychee (5) are already given in the basket. You are +// not allowed to insert any more of these fruits! +// +// Make me pass the tests! +// +// Execute the command `rustlings hint hashmaps2` if you need +// hints. + +// I AM NOT DONE + +use std::collections::HashMap; + +#[derive(Hash, PartialEq, Eq)] +enum Fruit { + Apple, + Banana, + Mango, + Lychee, + Pineapple, +} + +fn fruit_basket(basket: &mut HashMap) { + let fruit_kinds = vec![ + Fruit::Apple, + Fruit::Banana, + Fruit::Mango, + Fruit::Lychee, + Fruit::Pineapple, + ]; + + for fruit in fruit_kinds { + // TODO: Put new fruits if not already present. Note that you + // are not allowed to put any type of fruit that's already + // present! + } +} + +#[cfg(test)] +mod tests { + use super::*; + + fn get_fruit_basket() -> HashMap { + let mut basket = HashMap::::new(); + basket.insert(Fruit::Apple, 4); + basket.insert(Fruit::Mango, 2); + basket.insert(Fruit::Lychee, 5); + + basket + } + + #[test] + fn test_given_fruits_are_not_modified() { + let mut basket = get_fruit_basket(); + fruit_basket(&mut basket); + assert_eq!(*basket.get(&Fruit::Apple).unwrap(), 4); + assert_eq!(*basket.get(&Fruit::Mango).unwrap(), 2); + assert_eq!(*basket.get(&Fruit::Lychee).unwrap(), 5); + } + + #[test] + fn at_least_five_types_of_fruits() { + let mut basket = get_fruit_basket(); + fruit_basket(&mut basket); + let count_fruit_kinds = basket.len(); + assert!(count_fruit_kinds >= 5); + } + + #[test] + fn greater_than_eleven_fruits() { + let mut basket = get_fruit_basket(); + fruit_basket(&mut basket); + let count = basket.values().sum::(); + assert!(count > 11); + } +} -- cgit v1.2.3