From d76140e0c9359aeab79d55046abe7ee290656adc Mon Sep 17 00:00:00 2001 From: Reality Enjoyer Date: Wed, 14 Jan 2026 07:09:27 +0000 Subject: [PATCH] hash maps --- average_speed/Cargo.toml | 6 +++ average_speed/src/main.rs | 80 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 86 insertions(+) create mode 100644 average_speed/Cargo.toml create mode 100644 average_speed/src/main.rs diff --git a/average_speed/Cargo.toml b/average_speed/Cargo.toml new file mode 100644 index 0000000..bdf60ad --- /dev/null +++ b/average_speed/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "average_speed" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/average_speed/src/main.rs b/average_speed/src/main.rs new file mode 100644 index 0000000..8cb7a8d --- /dev/null +++ b/average_speed/src/main.rs @@ -0,0 +1,80 @@ +fn main() { + use std::collections::HashMap; + + // initialize a hash map of runners to store their average lap timings + let mut runners = HashMap::new(); + + let joe = "Joe".to_string(); + let jill = "Jill".to_string(); + let jane = "Jane".to_string(); + let jack = "Jack".to_string(); + + // insert joe and set his average to 10 + runners.insert(joe.clone(), 10); + println!("DEBUG: there's only Joe"); + println!("\tthe current values are:\n\t{runners:?}"); + + // insert other runners and set their default values + runners.entry(jill.clone()).or_insert(5); + runners.entry(jane.clone()).or_insert(5); + runners.entry(jack.clone()).or_insert(5); + println!("\nDEBUG: we initialized Jill, Jane and Jack with 5 minutes per lap"); + println!("\tthe current values are:\n\t{runners:?}"); + + // hard update jill's average to another value + println!("\nDEBUG: hard setting Jill's value to 20"); + println!("\tJill's average before: {:?}", runners.get(&jill).unwrap()); + runners.insert(jill.clone(), 20); + println!("\tJill's average after: {:?}", runners.get(&jill).unwrap()); + + // update current values based on old values + println!( + "\nDEBUG: runners have completed one lap + their timings are: + \tJill: 4 + \tJack: 10 + \tJane: 8 + \tJoe: 9" + ); + println!("\nDEBUG: updating their values..."); + println!("\tvalues before updating:\n\t{runners:?}"); + + // can be improved using hash maps + let val = vec![4, 10, 8, 9]; + let names = ["Jill", "Jack", "Jane", "Joe"]; + + let mut count = 0; + + for n in names { + let tmp = n.to_string(); + let updater = runners.entry(tmp.clone()).or_insert(0); + *updater += val[count]; + *updater /= 2; + count += 1; + } + + println!("\n\tvalues after updating:\n\t{runners:?}"); +} + +/* figuring out how to update values + +println!("Jill's average before: {:?}", runners.get(&jill).unwrap()); + +let curr_value = runners.get(&jill).unwrap(); +println!("\t{curr_value}"); + +let new_value = 4; +println!("\t{new_value}"); + +let final_value = (curr_value + new_value) / 2; +println!("\t{final_value}"); + +runners.insert(jill.clone(), final_value); + +let updater = runners.entry(jill.clone()).or_insert(0); +*updater += new_value; +*updater /= 2; + +println!("Jill's average after: {:?}", runners.get(&jill).unwrap()); + +*/