improved solution to exercise

This commit is contained in:
2026-01-15 07:35:30 +00:00
parent 1d9dc7559d
commit 6713144522
2 changed files with 18 additions and 32 deletions

View File

@@ -9,8 +9,8 @@
- ✅ Chapters 1-3: Basics, Variables, Functions, Control Flow - ✅ Chapters 1-3: Basics, Variables, Functions, Control Flow
- ✅ Chapter 4: Ownership, Borrowing, Slices - ✅ Chapter 4: Ownership, Borrowing, Slices
- ✅ Chapters 5-6: Structs, Enums, Pattern Matching - ✅ Chapters 5-6: Structs, Enums, Pattern Matching
- 🔄 Chapter 7: Modules (Starting now) - Chapter 7: Modules
- Chapter 8: Collections - Chapter 8: Collections
- ⏳ Chapter 9: Error Handling - ⏳ Chapter 9: Error Handling
## Exercise Completion Log ## Exercise Completion Log

View File

@@ -1,5 +1,5 @@
fn main() { fn main() {
let test_vec = vec![1, 2, 2, 2, 2, 3, 4, 5]; // should return (3.0, 3, 3) let test_vec = vec![1, 2, 2, 3, 4, 5, 9, 9, 9, 9];
println!("{:?}", calculate_stats(test_vec)); println!("{:?}", calculate_stats(test_vec));
} }
@@ -12,55 +12,41 @@ struct Stats {
} }
fn calculate_stats(numbers: Vec<i32>) -> Stats { fn calculate_stats(numbers: Vec<i32>) -> Stats {
use std::collections::HashMap; let mut numbers = numbers.clone();
let mut tmp: Vec<i32> = numbers; numbers.sort();
let len = tmp.len(); // let mut median = 0;
tmp.sort();
let mut median: i32 = 0;
// median // median
if len % 2 != 0 { let len = numbers.len();
median = tmp[len / 2]; let median = if len % 2 != 0 {
numbers[len / 2]
} else { } else {
median = (tmp[len / 2] + tmp[(len / 2) - 1]) / 2; (numbers[len / 2] + numbers[(len / 2) - 1]) / 2
} };
// mean // mean
let mut sum: i32 = 0; let sum: i32 = numbers.iter().sum();
let tmp2 = tmp.clone();
for i in tmp2 {
sum += i;
}
let mean = sum as f64 / len as f64; let mean = sum as f64 / len as f64;
//mode //mode
use std::collections::HashMap;
let mut map = HashMap::new(); let mut map = HashMap::new();
let tmp3 = tmp.clone(); for num in numbers {
for num in tmp3 {
let count = map.entry(num).or_insert(0); let count = map.entry(num).or_insert(0);
*count += 1; *count += 1;
} }
let tmp4 = tmp.clone(); let mut mode = 0;
let mut max_count = 0;
let mut mode_calc = *map.get(&1).unwrap();
let mut mode: i32 = 0;
for (k, v) in map { for (k, v) in map {
if v > mode_calc { if v > max_count {
mode = k; mode = k;
max_count = v;
} }
} }
println!("{:?}", tmp4);
let return_value = Stats { let return_value = Stats {
mean: mean, mean: mean,
median: median, median: median,