If you’ve completed the first part of the Student Grades Tracker challenge, congratulations! Now it’s time to enhance the functionality by adding methods directly to the Student
struct.
This will help you practice designing methods for individual struct instances while integrating them into a larger system.
For this challenge, we’ll build upon the StudentGrades
system. In addition to the methods you’ve already implemented, you’ll now focus on adding two new methods to the Student
struct itself.
You need to extend the Student
struct by implementing two methods:
add_grade
: Add a grade to the student’s grades
vector.average_grade(&self) -> f64
: Calculate and return the average grade of the student. Return 0.0
if the student has no grades.The StudentGrades
struct remains the same as in the previous challenge. You’ll modify its existing methods to use the newly added methods of the Student
struct.
use std::collections::HashMap;pub struct Student { pub name: String, pub grades: Vec<u8>,}impl Student { pub fn add_grade(&mut self, grade: u8) { // Implement here self.grades.push(grade); } pub fn average_grade(&self) -> f64 { // Implement here if self.grades.is_empty() { return 0.0; } let sum: u8 = self.grades.iter().sum(); sum as f64 / self.grades.len() as f64 }}pub struct StudentGrades { pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } pub fn add_student(&mut self, name: &str) { self.students.entry(name.to_string()).or_insert(Student { name: name.to_string(), grades: vec![], }); } pub fn add_grade(&mut self, name: &str, grade: u8) { if let Some(student) = self.students.get_mut(name) { student.add_grade(grade); } } pub fn get_grades(&self, name: &str) -> &[u8] { &self.students.get(name).unwrap().grades }}pub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); let alice = tracker.students.get_mut("Alice").unwrap(); alice.add_grade(95); println!("{:?}", alice.grades); println!("{:?}", alice.average_grade()); println!("{:?}", tracker.get_grades("Bob"));}
use std::collections::HashMap;pub struct Student { pub name: String, pub grades: Vec<u8>,}impl Student { pub fn add_grade(&mut self, grade: u8) { self.grades.push(grade); } pub fn average_grade(&self) -> f64 { if self.grades.is_empty() { return 0.0; } self.grades.iter().sum::<u8>() as f64 / self.grades.len() as f64 }}pub struct StudentGrades { pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } pub fn add_student(&mut self, name: &str) { self.students.entry(name.to_string()).or_insert(Student { name: name.to_string(), grades: vec![], }); } pub fn add_grade(&mut self, name: &str, grade: u8) { if let Some(student) = self.students.get_mut(name) { student.add_grade(grade); } } pub fn get_grades(&self, name: &str) -> &[u8] { &self.students.get(name).unwrap().grades }}pub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); let alice = tracker.students.get_mut("Alice").unwrap(); alice.add_grade(95); println!("{:?}", alice.grades); println!("{:?}", alice.average_grade()); println!("{:?}", tracker.get_grades("Bob"));}
use std::collections::HashMap;pub struct Student { pub name: String, pub grades: Vec<u8>,}impl Student { pub fn add_grade(&mut self, grade: u8) { self.grades.push(grade); }pub fn average_grade(&self) -> f64 { let n = self.grades.len(); if n == 0 { return 0.0; } // Sum in integer space to avoid FP rounding during accumulation let sum: u32 = self.grades.iter().copied().map(u32::from).sum(); sum as f64 / n as f64}}pub struct StudentGrades { pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } pub fn add_student(&mut self, name: &str) { self.students.entry(name.to_string()).or_insert(Student { name: name.to_string(), grades: vec![], }); } pub fn add_grade(&mut self, name: &str, grade: u8) { if let Some(student) = self.students.get_mut(name) { student.add_grade(grade); } } pub fn get_grades(&self, name: &str) -> &[u8] { &self.students.get(name).unwrap().grades }}pub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); let alice = tracker.students.get_mut("Alice").unwrap(); alice.add_grade(95); println!("{:?}", alice.grades); println!("{:?}", alice.average_grade()); println!("{:?}", tracker.get_grades("Bob"));}
use std::collections::HashMap;pub struct Student { pub name: String, pub grades: Vec<u8>,}impl Student { pub fn add_grade(&mut self, grade: u8) { self.grades.push(grade); } pub fn average_grade(&self) -> f64 { let sum = self.grades.iter().fold(0.0,|acc,&el|acc+el as f64); if sum == 0.0 { return 0.0 } else { return sum / self.grades.len() as f64 } }}pub struct StudentGrades { pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } pub fn add_student(&mut self, name: &str) { self.students.entry(name.to_string()).or_insert(Student { name: name.to_string(), grades: vec![], }); } pub fn add_grade(&mut self, name: &str, grade: u8) { if let Some(student) = self.students.get_mut(name) { student.add_grade(grade); } } pub fn get_grades(&self, name: &str) -> &[u8] { &self.students.get(name).unwrap().grades }}pub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); let alice = tracker.students.get_mut("Alice").unwrap(); alice.add_grade(95); println!("{:?}", alice.grades); println!("{:?}", alice.average_grade()); println!("{:?}", tracker.get_grades("Bob"));}
use std::collections::HashMap;pub struct Student { pub name: String, pub grades: Vec<u8>,}impl Student { pub fn add_grade(&mut self, grade: u8) { // Implement here self.grades.push(grade); } pub fn average_grade(&self) -> f64 { // Implement here let mut res: f64 = 0.0; for i in &self.grades { res += *i as f64 } if self.grades.len() == 0{ res }else { res / self.grades.len() as f64 } }}pub struct StudentGrades { pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } pub fn add_student(&mut self, name: &str) { self.students.entry(name.to_string()).or_insert(Student { name: name.to_string(), grades: vec![], }); } pub fn add_grade(&mut self, name: &str, grade: u8) { if let Some(student) = self.students.get_mut(name) { student.add_grade(grade); } } pub fn get_grades(&self, name: &str) -> &[u8] { &self.students.get(name).unwrap().grades }}pub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); let alice = tracker.students.get_mut("Alice").unwrap(); alice.add_grade(95); println!("{:?}", alice.grades); println!("{:?}", alice.average_grade()); println!("{:?}", tracker.get_grades("Bob"));}
use std::collections::HashMap;pub struct Student { pub name: String, pub grades: Vec<u8>,}impl Student { pub fn add_grade(&mut self, grade: u8) { self.grades.push(grade); } pub fn average_grade(&self) -> f64 { let sum = self.grades.iter().cloned().sum::<u8>() as f64; if sum == 0.0 { return 0.0 } else { return sum/self.grades.len() as f64 } }}pub struct StudentGrades { pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } pub fn add_student(&mut self, name: &str) { self.students.entry(name.to_string()).or_insert(Student { name: name.to_string(), grades: vec![], }); } pub fn add_grade(&mut self, name: &str, grade: u8) { if let Some(student) = self.students.get_mut(name) { student.add_grade(grade); } } pub fn get_grades(&self, name: &str) -> &[u8] { &self.students.get(name).unwrap().grades }}pub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); let alice = tracker.students.get_mut("Alice").unwrap(); alice.add_grade(95); println!("{:?}", alice.grades); println!("{:?}", alice.average_grade()); println!("{:?}", tracker.get_grades("Bob"));}
use std::collections::HashMap;pub struct Student { pub name: String, pub grades: Vec<u8>,}impl Student { pub fn add_grade(&mut self, grade: u8) { self.grades.push(grade); } pub fn average_grade(&self) -> f64 { if self.grades.is_empty() { 0.0f64 } else { self.grades.iter().sum::<u8>() as f64 / self.grades.len() as f64 } }}pub struct StudentGrades { pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } pub fn add_student(&mut self, name: &str) { self.students.entry(name.to_string()).or_insert(Student { name: name.to_string(), grades: vec![], }); } pub fn add_grade(&mut self, name: &str, grade: u8) { if let Some(student) = self.students.get_mut(name) { student.add_grade(grade); } } pub fn get_grades(&self, name: &str) -> &[u8] { &self.students.get(name).unwrap().grades }}pub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); let alice = tracker.students.get_mut("Alice").unwrap(); alice.add_grade(95); println!("{:?}", alice.grades); println!("{:?}", alice.average_grade()); println!("{:?}", tracker.get_grades("Bob"));}
use std::collections::HashMap;pub struct Student { pub name: String, pub grades: Vec<u8>,}impl Student { pub fn add_grade(&mut self, grade: u8) { self.grades.push(grade); } pub fn average_grade(&self) -> f64 { if self.grades.is_empty() { 0.0f64 } else { self.grades.iter().sum::<u8>() as f64 / self.grades.len() as f64 } }}pub struct StudentGrades { pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } pub fn add_student(&mut self, name: &str) { self.students.entry(name.to_string()).or_insert(Student { name: name.to_string(), grades: vec![], }); } pub fn add_grade(&mut self, name: &str, grade: u8) { if let Some(student) = self.students.get_mut(name) { student.add_grade(grade); } } pub fn get_grades(&self, name: &str) -> &[u8] { &self.students.get(name).unwrap().grades }}pub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); let alice = tracker.students.get_mut("Alice").unwrap(); alice.add_grade(95); println!("{:?}", alice.grades); println!("{:?}", alice.average_grade()); println!("{:?}", tracker.get_grades("Bob"));}
use std::collections::HashMap;pub struct Student { pub name: String, pub grades: Vec<u8>,}impl Student { pub fn add_grade(&mut self, grade: u8) { // Implement here if !self.grades.contains(&grade) { self.grades.push(grade); } } pub fn average_grade(&self) -> f64 { // Implement here if self.grades.is_empty() { return 0.0; } let total_grades = self.grades.len() as f64; let grades_sum = self.grades.iter().map(|&grade| grade as f64).sum::<f64>() as f64; return grades_sum / total_grades; }}pub struct StudentGrades { pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } pub fn add_student(&mut self, name: &str) { self.students.entry(name.to_string()).or_insert(Student { name: name.to_string(), grades: vec![], }); } pub fn add_grade(&mut self, name: &str, grade: u8) { if let Some(student) = self.students.get_mut(name) { student.add_grade(grade); } } pub fn get_grades(&self, name: &str) -> &[u8] { &self.students.get(name).unwrap().grades }}pub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); let alice = tracker.students.get_mut("Alice").unwrap(); alice.add_grade(95); println!("{:?}", alice.grades); println!("{:?}", alice.average_grade()); println!("{:?}", tracker.get_grades("Bob"));}
use std::collections::HashMap;pub struct Student { pub name: String, pub grades: Vec<u8>,}impl Student { pub fn add_grade(&mut self, grade: u8) { // Implement here self.grades.push(grade); } pub fn average_grade(&self) -> f64 { // Implement here if self.grades.is_empty() { 0.0 } else { let total: u8 = self.grades.iter().sum(); total as f64 / self.grades.len() as f64 } }}pub struct StudentGrades { pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } pub fn add_student(&mut self, name: &str) { self.students.entry(name.to_string()).or_insert(Student { name: name.to_string(), grades: vec![], }); } pub fn add_grade(&mut self, name: &str, grade: u8) { if let Some(student) = self.students.get_mut(name) { student.add_grade(grade); } } pub fn get_grades(&self, name: &str) -> &[u8] { &self.students.get(name).unwrap().grades }}pub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); let alice = tracker.students.get_mut("Alice").unwrap(); alice.add_grade(95); println!("{:?}", alice.grades); println!("{:?}", alice.average_grade()); println!("{:?}", tracker.get_grades("Bob"));}
use std::collections::HashMap;pub struct Student { pub name: String, pub grades: Vec<u8>,}impl Student { pub fn add_grade(&mut self, grade: u8) { // Implement here self.grades.push(grade) } pub fn average_grade(&self) -> f64 { // Implement here if self.grades.is_empty(){ 0.0 }else{ let s:u32 = self.grades.iter().map(|&g|g as u32).sum(); s as f64 / self.grades.len() as f64 } }}pub struct StudentGrades { pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } pub fn add_student(&mut self, name: &str) { self.students.entry(name.to_string()).or_insert(Student { name: name.to_string(), grades: vec![], }); } pub fn add_grade(&mut self, name: &str, grade: u8) { if let Some(student) = self.students.get_mut(name) { student.add_grade(grade); } } pub fn get_grades(&self, name: &str) -> &[u8] { &self.students.get(name).unwrap().grades }}pub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); let alice = tracker.students.get_mut("Alice").unwrap(); alice.add_grade(95); println!("{:?}", alice.grades); println!("{:?}", alice.average_grade()); println!("{:?}", tracker.get_grades("Bob"));}
use std::collections::HashMap;pub struct Student { pub name: String, pub grades: Vec<u8>,}impl Student { pub fn add_grade(&mut self, grade: u8) { self.grades.push(grade); } pub fn average_grade(&self) -> f64 { if(self.grades.len()== 0){ return 0.0; } let sum: u8 = self.grades.iter().sum(); (sum as f64) / (self.grades.len() as f64) }}pub struct StudentGrades { pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } pub fn add_student(&mut self, name: &str) { self.students.entry(name.to_string()).or_insert(Student { name: name.to_string(), grades: vec![], }); } pub fn add_grade(&mut self, name: &str, grade: u8) { if let Some(student) = self.students.get_mut(name) { student.add_grade(grade); } } pub fn get_grades(&self, name: &str) -> &[u8] { &self.students.get(name).unwrap().grades }}pub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); let alice = tracker.students.get_mut("Alice").unwrap(); alice.add_grade(95); println!("{:?}", alice.grades); println!("{:?}", alice.average_grade()); println!("{:?}", tracker.get_grades("Bob"));}
use std::collections::HashMap;pub struct Student { pub name: String, pub grades: Vec<u8>,}impl Student { pub fn add_grade(&mut self, grade: u8) { // Implement here self.grades.push(grade); } pub fn average_grade(&self) -> f64 { // Implement here if self.grades.len() == 0 { 0.0 } else { let sum: u32 = self.grades.iter().map(|g| *g as u32).sum(); sum as f64 / self.grades.len() as f64 } }}pub struct StudentGrades { pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } pub fn add_student(&mut self, name: &str) { self.students.entry(name.to_string()).or_insert(Student { name: name.to_string(), grades: vec![], }); } pub fn add_grade(&mut self, name: &str, grade: u8) { if let Some(student) = self.students.get_mut(name) { student.add_grade(grade); } } pub fn get_grades(&self, name: &str) -> &[u8] { &self.students.get(name).unwrap().grades }}pub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); let alice = tracker.students.get_mut("Alice").unwrap(); alice.add_grade(95); println!("{:?}", alice.grades); println!("{:?}", alice.average_grade()); println!("{:?}", tracker.get_grades("Bob"));}
use std::collections::HashMap;pub struct Student { pub name: String, pub grades: Vec<u8>,}impl Student { pub fn add_grade(&mut self, grade: u8) { self.grades.push(grade); } pub fn average_grade(&self) -> f64 { if self.grades.len()==0 { 0.0 } else { self.grades.iter().map(|&x|x as i32).sum::<i32>() as f64 / self.grades.len() as f64 } }}pub struct StudentGrades { pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } pub fn add_student(&mut self, name: &str) { self.students.entry(name.to_string()).or_insert(Student { name: name.to_string(), grades: vec![], }); } pub fn add_grade(&mut self, name: &str, grade: u8) { if let Some(student) = self.students.get_mut(name) { student.add_grade(grade); } } pub fn get_grades(&self, name: &str) -> &[u8] { &self.students.get(name).unwrap().grades }}pub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); let alice = tracker.students.get_mut("Alice").unwrap(); alice.add_grade(95); println!("{:?}", alice.grades); println!("{:?}", alice.average_grade()); println!("{:?}", tracker.get_grades("Bob"));}
use std::collections::HashMap;#[derive(Debug, Clone)]pub struct Student { pub name: String, pub grades: Vec<u8>,}impl Student { pub fn add_grade(&mut self, grade: u8) { // Implement here self.grades.push(grade); } pub fn average_grade(&self) -> f64 { // Implement here if self.grades.is_empty() { return 0.0; } let mut sum = 0.0; let grades = &self.grades; for i in grades.iter() { sum += *i as f64; } sum / (grades.len() as f64) }}pub struct StudentGrades { pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } pub fn add_student(&mut self, name: &str) { self.students.entry(name.to_string()).or_insert(Student { name: name.to_string(), grades: vec![], }); } pub fn add_grade(&mut self, name: &str, grade: u8) { if let Some(student) = self.students.get_mut(name) { student.add_grade(grade); } } pub fn get_grades(&self, name: &str) -> &[u8] { &self.students.get(name).unwrap().grades }}pub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); let alice = tracker.students.get_mut("Alice").unwrap(); alice.add_grade(95); println!("{:?}", alice.grades); println!("{:?}", alice.average_grade()); println!("{:?}", tracker.get_grades("Bob"));}
use std::collections::HashMap;pub struct Student { pub name: String, pub grades: Vec<u8>,}impl Student { pub fn add_grade(&mut self, grade: u8) { self.grades.push(grade); } pub fn average_grade(&self) -> f64 { match self.grades.len(){ 0 => { 0.0 }, len => { self.grades.iter().fold(0f64, |x,y| x + f64::from(*y)) / len as f64 } } }}pub struct StudentGrades { pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } pub fn add_student(&mut self, name: &str) { self.students.entry(name.to_string()).or_insert(Student { name: name.to_string(), grades: vec![], }); } pub fn add_grade(&mut self, name: &str, grade: u8) { if let Some(student) = self.students.get_mut(name) { student.add_grade(grade); } } pub fn get_grades(&self, name: &str) -> &[u8] { &self.students.get(name).unwrap().grades }}pub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); let alice = tracker.students.get_mut("Alice").unwrap(); alice.add_grade(95); println!("{:?}", alice.grades); println!("{:?}", alice.average_grade()); println!("{:?}", tracker.get_grades("Bob"));}
use std::collections::HashMap;pub struct Student { pub name: String, pub grades: Vec<u8>,}impl Student { pub fn add_grade(&mut self, grade: u8) { self.grades.push(grade); } pub fn average_grade(&self) -> f64 { match self.grades.len(){ 0 => { 0.0 }, len => { self.grades.iter().fold(0f64, |x,y| x + f64::from(*y)) / len as f64 } } }}pub struct StudentGrades { pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } pub fn add_student(&mut self, name: &str) { self.students.entry(name.to_string()).or_insert(Student { name: name.to_string(), grades: vec![], }); } pub fn add_grade(&mut self, name: &str, grade: u8) { if let Some(student) = self.students.get_mut(name) { student.add_grade(grade); } } pub fn get_grades(&self, name: &str) -> &[u8] { &self.students.get(name).unwrap().grades }}pub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); let alice = tracker.students.get_mut("Alice").unwrap(); alice.add_grade(95); println!("{:?}", alice.grades); println!("{:?}", alice.average_grade()); println!("{:?}", tracker.get_grades("Bob"));}
use std::collections::HashMap;pub struct Student { pub name: String, pub grades: Vec<u8>,}impl Student { pub fn add_grade(&mut self, grade: u8) { self.grades.push(grade) } pub fn average_grade(&self) -> f64 { if self.grades.is_empty() { return 0 as f64 } let sum: f64 = self.grades.iter().map(|&num| num as f64).sum(); sum / self.grades.len() as f64 }}pub struct StudentGrades { pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } pub fn add_student(&mut self, name: &str) { self.students.entry(name.to_string()).or_insert(Student { name: name.to_string(), grades: vec![], }); } pub fn add_grade(&mut self, name: &str, grade: u8) { if let Some(student) = self.students.get_mut(name) { student.add_grade(grade); } } pub fn get_grades(&self, name: &str) -> &[u8] { &self.students.get(name).unwrap().grades }}pub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); let alice = tracker.students.get_mut("Alice").unwrap(); alice.add_grade(95); println!("{:?}", alice.grades); println!("{:?}", alice.average_grade()); println!("{:?}", tracker.get_grades("Bob"));}
use std::collections::HashMap;pub struct Student { pub name: String, pub grades: Vec<u8>,}impl Student { pub fn add_grade(&mut self, grade: u8) { self.grades.push(grade); } pub fn average_grade(&self) -> f64 { if self.grades.len()==0 { 0.0 } else { self.grades.iter().map(|&x|x as i32).sum::<i32>() as f64 / self.grades.len() as f64 } }}pub struct StudentGrades { pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } pub fn add_student(&mut self, name: &str) { self.students.entry(name.to_string()).or_insert(Student { name: name.to_string(), grades: vec![], }); } pub fn add_grade(&mut self, name: &str, grade: u8) { if let Some(student) = self.students.get_mut(name) { student.add_grade(grade); } } pub fn get_grades(&self, name: &str) -> &[u8] { &self.students.get(name).unwrap().grades }}pub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); let alice = tracker.students.get_mut("Alice").unwrap(); alice.add_grade(95); println!("{:?}", alice.grades); println!("{:?}", alice.average_grade()); println!("{:?}", tracker.get_grades("Bob"));}
use std::collections::HashMap;pub struct Student { pub name: String, pub grades: Vec<u8>,}impl Student { pub fn add_grade(&mut self, grade: u8) { self.grades.push(grade); } pub fn average_grade(&self) -> f64 { if self.grades.len() == 0 { return 0.0 } self.grades.iter().map(|&x|{x as f64}).sum::<f64>() / self.grades.len() as f64 }}pub struct StudentGrades { pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } pub fn add_student(&mut self, name: &str) { self.students.entry(name.to_string()).or_insert(Student { name: name.to_string(), grades: vec![], }); } pub fn add_grade(&mut self, name: &str, grade: u8) { if let Some(student) = self.students.get_mut(name) { student.add_grade(grade); } } pub fn get_grades(&self, name: &str) -> &[u8] { &self.students.get(name).unwrap().grades }}pub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); let alice = tracker.students.get_mut("Alice").unwrap(); alice.add_grade(95); println!("{:?}", alice.grades); println!("{:?}", alice.average_grade()); println!("{:?}", tracker.get_grades("Bob"));}
use std::collections::HashMap;pub struct Student { pub name: String, pub grades: Vec<u8>,}impl Student { pub fn add_grade(&mut self, grade: u8) { // Implement here self.grades.push(grade); } pub fn average_grade(&self) -> f64 { // Implement here if self.grades.is_empty() { return 0.0 } else { let mut total_grade: f64 = 0.0; for grade in self.grades.clone() { total_grade += grade as f64 } total_grade/ self.grades.len() as f64 } }}pub struct StudentGrades { pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } pub fn add_student(&mut self, name: &str) { self.students.entry(name.to_string()).or_insert(Student { name: name.to_string(), grades: vec![], }); } pub fn add_grade(&mut self, name: &str, grade: u8) { if let Some(student) = self.students.get_mut(name) { student.add_grade(grade); } } pub fn get_grades(&self, name: &str) -> &[u8] { &self.students.get(name).unwrap().grades }}pub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); let alice = tracker.students.get_mut("Alice").unwrap(); alice.add_grade(95); println!("{:?}", alice.grades); println!("{:?}", alice.average_grade()); println!("{:?}", tracker.get_grades("Bob"));}
use std::collections::HashMap;pub struct Student { pub name: String, pub grades: Vec<u8>,}impl Student { pub fn add_grade(&mut self, grade: u8) { // Implement here self.grades.push(grade); } pub fn average_grade(&self) -> f64 { if self.grades.is_empty() { return 0.0 } // Implement here let sum: f64 = self.grades.iter().map(|&n| n as f64).sum(); sum / self.grades.len() as f64 }}pub struct StudentGrades { pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } pub fn add_student(&mut self, name: &str) { self.students.entry(name.to_string()).or_insert(Student { name: name.to_string(), grades: vec![], }); } pub fn add_grade(&mut self, name: &str, grade: u8) { if let Some(student) = self.students.get_mut(name) { student.add_grade(grade); } } pub fn get_grades(&self, name: &str) -> &[u8] { &self.students.get(name).unwrap().grades }}pub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); let alice = tracker.students.get_mut("Alice").unwrap(); alice.add_grade(95); println!("{:?}", alice.grades); println!("{:?}", alice.average_grade()); println!("{:?}", tracker.get_grades("Bob"));}
use std::collections::HashMap;pub struct Student { pub name: String, pub grades: Vec<u8>,}impl Student { pub fn add_grade(&mut self, grade: u8) { // Implement here self.grades.push(grade); } pub fn average_grade(&self) -> f64 { // Implement here if self.grades.len() == 0 { return 0.0; } let sumvec: f64 = self.grades.iter().map(|&x| x as f64).sum(); sumvec / self.grades.len() as f64 }}pub struct StudentGrades { pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } pub fn add_student(&mut self, name: &str) { self.students.entry(name.to_string()).or_insert(Student { name: name.to_string(), grades: vec![], }); } pub fn add_grade(&mut self, name: &str, grade: u8) { if let Some(student) = self.students.get_mut(name) { student.add_grade(grade); } } pub fn get_grades(&self, name: &str) -> &[u8] { &self.students.get(name).unwrap().grades }}pub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); let alice = tracker.students.get_mut("Alice").unwrap(); alice.add_grade(95); println!("{:?}", alice.grades); println!("{:?}", alice.average_grade()); println!("{:?}", tracker.get_grades("Bob"));}
use std::collections::HashMap;pub struct Student { pub name: String, pub grades: Vec<u8>,}impl Student { pub fn add_grade(&mut self, grade: u8) { self.grades.push(grade); } pub fn average_grade(&self) -> f64 { if self.grades.is_empty() { return 0.0 } self.grades.iter().sum::<u8>() as f64 / self.grades.len() as f64 }}pub struct StudentGrades { pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } pub fn add_student(&mut self, name: &str) { self.students.entry(name.to_string()).or_insert(Student { name: name.to_string(), grades: vec![], }); } pub fn add_grade(&mut self, name: &str, grade: u8) { if let Some(student) = self.students.get_mut(name) { student.add_grade(grade); } } pub fn get_grades(&self, name: &str) -> &[u8] { &self.students.get(name).unwrap().grades }}pub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); let alice = tracker.students.get_mut("Alice").unwrap(); alice.add_grade(95); println!("{:?}", alice.grades); println!("{:?}", alice.average_grade()); println!("{:?}", tracker.get_grades("Bob"));}
use std::collections::HashMap;pub struct Student { pub name: String, pub grades: Vec<u8>,}impl Student { pub fn add_grade(&mut self, grade: u8) { // Implement here self.grades.push(grade); } pub fn average_grade(&self) -> f64 { // Implement here let mut grade_calc: f64 = 0.0; for grade in &self.grades { grade_calc += *grade as f64; } if self.grades.len() > 0 { return grade_calc / self.grades.len() as f64; } 0.0 }}pub struct StudentGrades { pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } pub fn add_student(&mut self, name: &str) { self.students.entry(name.to_string()).or_insert(Student { name: name.to_string(), grades: vec![], }); } pub fn add_grade(&mut self, name: &str, grade: u8) { if let Some(student) = self.students.get_mut(name) { student.add_grade(grade); } } pub fn get_grades(&self, name: &str) -> &[u8] { &self.students.get(name).unwrap().grades }}pub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); let alice = tracker.students.get_mut("Alice").unwrap(); alice.add_grade(95); println!("{:?}", alice.grades); println!("{:?}", alice.average_grade()); println!("{:?}", tracker.get_grades("Bob"));}
use std::collections::HashMap;pub struct Student { pub name: String, pub grades: Vec<u8>,}impl Student { pub fn add_grade(&mut self, grade: u8) { // Implement here self.grades.push(grade); } pub fn average_grade(&self) -> f64 { // Implement here let result: u8 = self.grades.iter().sum(); if result == 0 { return 0.0 } result as f64 / self.grades.len() as f64 }}pub struct StudentGrades { pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } pub fn add_student(&mut self, name: &str) { self.students.entry(name.to_string()).or_insert(Student { name: name.to_string(), grades: vec![], }); } pub fn add_grade(&mut self, name: &str, grade: u8) { if let Some(student) = self.students.get_mut(name) { student.add_grade(grade); } } pub fn get_grades(&self, name: &str) -> &[u8] { &self.students.get(name).unwrap().grades }}pub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); let alice = tracker.students.get_mut("Alice").unwrap(); alice.add_grade(95); println!("{:?}", alice.grades); println!("{:?}", alice.average_grade()); println!("{:?}", tracker.get_grades("Bob"));}
use std::collections::HashMap;pub struct Student { pub name: String, pub grades: Vec<u8>,}impl Student { pub fn add_grade(&mut self, grade: u8) { self.grades.push(grade); } pub fn average_grade(&self) -> f64 { let size = self.grades.iter().len(); if size == 0 { return 0.0; } self.grades.iter().sum::<u8>() as f64 / size as f64 }}pub struct StudentGrades { pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } pub fn add_student(&mut self, name: &str) { self.students.entry(name.to_string()).or_insert(Student { name: name.to_string(), grades: vec![], }); } pub fn add_grade(&mut self, name: &str, grade: u8) { if let Some(student) = self.students.get_mut(name) { student.add_grade(grade); } } pub fn get_grades(&self, name: &str) -> &[u8] { &self.students.get(name).unwrap().grades }}pub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); let alice = tracker.students.get_mut("Alice").unwrap(); alice.add_grade(95); println!("{:?}", alice.grades); println!("{:?}", alice.average_grade()); println!("{:?}", tracker.get_grades("Bob"));}
use std::collections::HashMap;pub struct Student { pub name: String, pub grades: Vec<u8>,}impl Student { pub fn add_grade(&mut self, grade: u8) { self.grades.push(grade); // Implement here } pub fn average_grade(&self) -> f64 { let count = self.grades.len(); if count == 0 { return 0.0; } let sum: f64 = self.grades.iter().map(|&v| { v as f64 }).sum(); sum / (count as f64) // Implement here }}pub struct StudentGrades { pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } pub fn add_student(&mut self, name: &str) { self.students.entry(name.to_string()).or_insert(Student { name: name.to_string(), grades: vec![], }); } pub fn add_grade(&mut self, name: &str, grade: u8) { if let Some(student) = self.students.get_mut(name) { student.add_grade(grade); } } pub fn get_grades(&self, name: &str) -> &[u8] { &self.students.get(name).unwrap().grades }}pub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); let alice = tracker.students.get_mut("Alice").unwrap(); alice.add_grade(95); println!("{:?}", alice.grades); println!("{:?}", alice.average_grade()); println!("{:?}", tracker.get_grades("Bob"));}
use std::collections::HashMap;pub struct Student { pub name: String, pub grades: Vec<u8>,}impl Student { pub fn add_grade(&mut self, grade: u8) { // Implement here self.grades.push(grade); } pub fn average_grade(&self) -> f64 { // Implement here if self.grades.is_empty() { return 0f64; } f64::from(self.grades.iter().copied().sum::<u8>()) / self.grades.len() as f64 }}pub struct StudentGrades { pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } pub fn add_student(&mut self, name: &str) { self.students.entry(name.to_string()).or_insert(Student { name: name.to_string(), grades: vec![], }); } pub fn add_grade(&mut self, name: &str, grade: u8) { if let Some(student) = self.students.get_mut(name) { student.add_grade(grade); } } pub fn get_grades(&self, name: &str) -> &[u8] { &self.students.get(name).unwrap().grades }}pub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); let alice = tracker.students.get_mut("Alice").unwrap(); alice.add_grade(95); println!("{:?}", alice.grades); println!("{:?}", alice.average_grade()); println!("{:?}", tracker.get_grades("Bob"));}
use std::collections::HashMap;pub struct Student { pub name: String, pub grades: Vec<u8>,}impl Student { pub fn add_grade(&mut self, grade: u8) { self.grades.push(grade); } pub fn average_grade(&self) -> f64 { if self.grades.is_empty() { return 0.0; } let count: f64 = self.grades.iter().count() as f64; let mut sum: f64 = 0.0; for i in self.grades.iter() { sum += *i as f64; } sum / count }}pub struct StudentGrades { pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } pub fn add_student(&mut self, name: &str) { self.students.entry(name.to_string()).or_insert(Student { name: name.to_string(), grades: vec![], }); } pub fn add_grade(&mut self, name: &str, grade: u8) { if let Some(student) = self.students.get_mut(name) { student.add_grade(grade); } } pub fn get_grades(&self, name: &str) -> &[u8] { &self.students.get(name).unwrap().grades }}pub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); let alice = tracker.students.get_mut("Alice").unwrap(); alice.add_grade(95); println!("{:?}", alice.grades); println!("{:?}", alice.average_grade()); println!("{:?}", tracker.get_grades("Bob"));}
use std::collections::HashMap;pub struct Student { pub name: String, pub grades: Vec<u8>,}impl Student { pub fn add_grade(&mut self, grade: u8) { self.grades.push(grade); } pub fn average_grade(&self) -> f64 { if self.grades.is_empty() { 0.0 } else { self.grades.iter().sum::<u8>() as f64 / self.grades.len() as f64 } }}pub struct StudentGrades { pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } pub fn add_student(&mut self, name: &str) { self.students.entry(name.to_string()).or_insert(Student { name: name.to_string(), grades: vec![], }); } pub fn add_grade(&mut self, name: &str, grade: u8) { if let Some(student) = self.students.get_mut(name) { student.add_grade(grade); } } pub fn get_grades(&self, name: &str) -> &[u8] { &self.students.get(name).unwrap().grades }}pub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); let alice = tracker.students.get_mut("Alice").unwrap(); alice.add_grade(95); println!("{:?}", alice.grades); println!("{:?}", alice.average_grade()); println!("{:?}", tracker.get_grades("Bob"));}
use std::collections::HashMap;pub struct Student { pub name: String, pub grades: Vec<u8>,}impl Student { pub fn add_grade(&mut self, grade: u8) { self.grades.push(grade); } pub fn average_grade(&self) -> f64 { if self.grades.len() == 0 { 0.0 } else { self.grades.iter().map(|grade| *grade as f64).sum::<f64>() / self.grades.len() as f64 } }}pub struct StudentGrades { pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } pub fn add_student(&mut self, name: &str) { self.students.entry(name.to_string()).or_insert(Student { name: name.to_string(), grades: vec![], }); } pub fn add_grade(&mut self, name: &str, grade: u8) { if let Some(student) = self.students.get_mut(name) { student.add_grade(grade); } } pub fn get_grades(&self, name: &str) -> &[u8] { &self.students.get(name).unwrap().grades }}pub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); let alice = tracker.students.get_mut("Alice").unwrap(); alice.add_grade(95); println!("{:?}", alice.grades); println!("{:?}", alice.average_grade()); println!("{:?}", tracker.get_grades("Bob"));}
use std::collections::HashMap;pub struct Student { pub name: String, pub grades: Vec<u8>,}impl Student { pub fn add_grade(&mut self, grade: u8) { // Implement here self.grades.push(grade); } pub fn average_grade(&self) -> f64 { // Implement here if self.grades.is_empty() { return 0.0; } let mut total: u32 = 0; for grade in &self.grades { total += *grade as u32; } total as f64 / self.grades.len() as f64 }}pub struct StudentGrades { pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } pub fn add_student(&mut self, name: &str) { self.students.entry(name.to_string()).or_insert(Student { name: name.to_string(), grades: vec![], }); } pub fn add_grade(&mut self, name: &str, grade: u8) { if let Some(student) = self.students.get_mut(name) { student.add_grade(grade); } } pub fn get_grades(&self, name: &str) -> &[u8] { &self.students.get(name).unwrap().grades }}pub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); let alice = tracker.students.get_mut("Alice").unwrap(); alice.add_grade(95); println!("{:?}", alice.grades); println!("{:?}", alice.average_grade()); println!("{:?}", tracker.get_grades("Bob"));}
use std::collections::HashMap;pub struct Student { pub name: String, pub grades: Vec<u8>,}impl Student { pub fn add_grade(&mut self, grade: u8) { self.grades.push(grade); } pub fn average_grade(&self) -> f64 { let total: f64 = self.grades.iter().map(|g| *g as f64).sum(); if self.grades.len() > 0 { total / self.grades.len() as f64 } else { 0.0 } }}pub struct StudentGrades { pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } pub fn add_student(&mut self, name: &str) { self.students.entry(name.to_string()).or_insert(Student { name: name.to_string(), grades: vec![], }); } pub fn add_grade(&mut self, name: &str, grade: u8) { if let Some(student) = self.students.get_mut(name) { student.add_grade(grade); } } pub fn get_grades(&self, name: &str) -> &[u8] { &self.students.get(name).unwrap().grades }}pub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); let alice = tracker.students.get_mut("Alice").unwrap(); alice.add_grade(95); println!("{:?}", alice.grades); println!("{:?}", alice.average_grade()); println!("{:?}", tracker.get_grades("Bob"));}
use std::collections::HashMap;pub struct Student { pub name: String, pub grades: Vec<u8>,}impl Student { pub fn add_grade(&mut self, grade: u8) { self.grades.push(grade); } pub fn average_grade(&self) -> f64 { let (sum, count) = self.grades.iter().fold((0, 0), |(sum, cnt), x| (sum + x, cnt + 1)); if count == 0 { 0f64 } else { sum as f64 / count as f64 } }}pub struct StudentGrades { pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } pub fn add_student(&mut self, name: &str) { self.students.entry(name.to_string()).or_insert(Student { name: name.to_string(), grades: vec![], }); } pub fn add_grade(&mut self, name: &str, grade: u8) { if let Some(student) = self.students.get_mut(name) { student.add_grade(grade); } } pub fn get_grades(&self, name: &str) -> &[u8] { &self.students.get(name).unwrap().grades }}pub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); let alice = tracker.students.get_mut("Alice").unwrap(); alice.add_grade(95); println!("{:?}", alice.grades); println!("{:?}", alice.average_grade()); println!("{:?}", tracker.get_grades("Bob"));}
use std::collections::HashMap;pub struct Student { pub name: String, pub grades: Vec<u8>,}impl Student { pub fn add_grade(&mut self, grade: u8) { self.grades.push(grade); } pub fn average_grade(&self) -> f64 { if self.grades.is_empty() { 0.0 } else { self.grades.iter().map(|&g| g as f64).sum::<f64>() / self.grades.len() as f64 } }}pub struct StudentGrades { pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } pub fn add_student(&mut self, name: &str) { self.students.entry(name.to_string()).or_insert(Student { name: name.to_string(), grades: vec![], }); } pub fn add_grade(&mut self, name: &str, grade: u8) { if let Some(student) = self.students.get_mut(name) { student.add_grade(grade); } } pub fn get_grades(&self, name: &str) -> &[u8] { &self.students.get(name).unwrap().grades }}pub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); let alice = tracker.students.get_mut("Alice").unwrap(); alice.add_grade(95); println!("{:?}", alice.grades); println!("{:?}", alice.average_grade()); println!("{:?}", tracker.get_grades("Bob"));}
use core::f64;use std::collections::HashMap;pub struct Student { pub name: String, pub grades: Vec<u8>,}impl Student { pub fn add_grade(&mut self, grade: u8) { self.grades.push(grade); } pub fn average_grade(&self) -> f64 { if self.grades.is_empty() { 0.0 } else { self.grades.iter().sum::<u8>() as f64 / self.grades.len() as f64 } }}pub struct StudentGrades { pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } pub fn add_student(&mut self, name: &str) { self.students.entry(name.to_string()).or_insert(Student { name: name.to_string(), grades: vec![], }); } pub fn add_grade(&mut self, name: &str, grade: u8) { if let Some(student) = self.students.get_mut(name) { student.add_grade(grade); } } pub fn get_grades(&self, name: &str) -> &[u8] { match self.students.get(name) { Some(student) => &student.grades, None => &[], } }}pub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); let alice = tracker.students.get_mut("Alice").unwrap(); alice.add_grade(95); println!("{:?}", alice.grades); println!("{:?}", alice.average_grade()); println!("{:?}", tracker.get_grades("Bob"));}
use std::collections::HashMap;pub struct Student { pub name: String, pub grades: Vec<u8>,}impl Student { pub fn add_grade(&mut self, grade: u8) { self.grades.push(grade); } pub fn average_grade(&self) -> f64 { if self.grades.is_empty() { return 0.0; } return self.grades.iter().map(|&g| g as u32).sum::<u32>() as f64 / self.grades.len() as f64; }}pub struct StudentGrades { pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } pub fn add_student(&mut self, name: &str) { self.students.entry(name.to_string()).or_insert(Student { name: name.to_string(), grades: vec![], }); } pub fn add_grade(&mut self, name: &str, grade: u8) { if let Some(student) = self.students.get_mut(name) { student.add_grade(grade); } } pub fn get_grades(&self, name: &str) -> &[u8] { &self.students.get(name).unwrap().grades }}pub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); let alice = tracker.students.get_mut("Alice").unwrap(); alice.add_grade(95); println!("{:?}", alice.grades); println!("{:?}", alice.average_grade()); println!("{:?}", tracker.get_grades("Bob"));}
use std::collections::HashMap;pub struct Student { pub name: String, pub grades: Vec<u8>,}impl Student { pub fn add_grade(&mut self, grade: u8) { // Implement here self.grades.push(grade); } pub fn average_grade(&self) -> f64 { let count = self.grades.len() as f64; if count == 0.0 { return 0.0f64; } // Implement here let sum: u32 = self.grades.iter().map(|&g| g as u32).sum(); sum as f64 / count }}pub struct StudentGrades { pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } pub fn add_student(&mut self, name: &str) { self.students.entry(name.to_string()).or_insert(Student { name: name.to_string(), grades: vec![], }); } pub fn add_grade(&mut self, name: &str, grade: u8) { if let Some(student) = self.students.get_mut(name) { student.add_grade(grade); } } pub fn get_grades(&self, name: &str) -> &[u8] { &self.students.get(name).unwrap().grades }}pub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); let alice = tracker.students.get_mut("Alice").unwrap(); alice.add_grade(95); println!("{:?}", alice.grades); println!("{:?}", alice.average_grade()); println!("{:?}", tracker.get_grades("Bob"));}
use std::collections::HashMap;pub struct Student { pub name: String, pub grades: Vec<u8>,}impl Student { pub fn add_grade(&mut self, grade: u8) { // Implement here self.grades.push(grade); } pub fn average_grade(&self) -> f64 { // Implement here if self.grades.is_empty() { return 0.0; } let sum: f64 = self.grades.iter().map(|&g| g as f64).sum(); sum / self.grades.len() as f64 }}pub struct StudentGrades { pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } pub fn add_student(&mut self, name: &str) { self.students.entry(name.to_string()).or_insert(Student { name: name.to_string(), grades: vec![], }); } pub fn add_grade(&mut self, name: &str, grade: u8) { if let Some(student) = self.students.get_mut(name) { student.add_grade(grade); } } pub fn get_grades(&self, name: &str) -> &[u8] { &self.students.get(name).unwrap().grades }}pub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); let alice = tracker.students.get_mut("Alice").unwrap(); alice.add_grade(95); println!("{:?}", alice.grades); println!("{:?}", alice.average_grade()); println!("{:?}", tracker.get_grades("Bob"));}
use std::collections::HashMap;pub struct Student { pub name: String, pub grades: Vec<u8>,}impl Student { pub fn add_grade(&mut self, grade: u8) { // Implement here self.grades.push(grade); } pub fn average_grade(&self) -> f64 { // Implement here if self.grades.is_empty() { return 0.0; } let sum: f64 = self.grades.iter().map(|&g| g as f64).sum(); sum / self.grades.len() as f64 }}pub struct StudentGrades { pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } pub fn add_student(&mut self, name: &str) { self.students.entry(name.to_string()).or_insert(Student { name: name.to_string(), grades: vec![], }); } pub fn add_grade(&mut self, name: &str, grade: u8) { if let Some(student) = self.students.get_mut(name) { student.add_grade(grade); } } pub fn get_grades(&self, name: &str) -> &[u8] { &self.students.get(name).unwrap().grades }}pub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); let alice = tracker.students.get_mut("Alice").unwrap(); alice.add_grade(95); println!("{:?}", alice.grades); println!("{:?}", alice.average_grade()); println!("{:?}", tracker.get_grades("Bob"));}
use std::collections::HashMap;pub struct Student { pub name: String, pub grades: Vec<u8>,}impl Student { pub fn add_grade(&mut self, grade: u8) { self.grades.push(grade); } pub fn average_grade(&self) -> f64 { if !self.grades.is_empty() { let sum = self.grades.iter().map(|&grade| grade as f64).sum::<f64>(); return sum / self.grades.len() as f64; } 0.0 }}pub struct StudentGrades { pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } pub fn add_student(&mut self, name: &str) { self.students.entry(name.to_string()).or_insert(Student { name: name.to_string(), grades: vec![], }); } pub fn add_grade(&mut self, name: &str, grade: u8) { if let Some(student) = self.students.get_mut(name) { student.add_grade(grade); } } pub fn get_grades(&self, name: &str) -> &[u8] { &self.students.get(name).unwrap().grades }}pub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); let alice = tracker.students.get_mut("Alice").unwrap(); alice.add_grade(95); println!("{:?}", alice.grades); println!("{:?}", alice.average_grade()); println!("{:?}", tracker.get_grades("Bob"));}
use std::collections::HashMap;pub struct Student { pub name: String, pub grades: Vec<u8>,}impl Student { pub fn add_grade(&mut self, grade: u8) { self.grades.push(grade); } pub fn average_grade(&self) -> f64 { if self.grades.is_empty() { return 0.0; } let sum: u64 = self.grades.iter().map(|&g| g as u64).sum(); sum as f64 / self.grades.len() as f64 }}pub struct StudentGrades { pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } pub fn add_student(&mut self, name: &str) { self.students.entry(name.to_string()).or_insert(Student { name: name.to_string(), grades: Vec::new(), }); } pub fn add_grade(&mut self, name: &str, grade: u8) { if let Some(student) = self.students.get_mut(name) { student.add_grade(grade); } } pub fn get_grades(&self, name: &str) -> Option<&[u8]> { self.students.get(name).map(|s| s.grades.as_slice()) }}pub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); if let Some(alice) = tracker.students.get_mut("Alice") { alice.add_grade(95); println!("Alice's grades: {:?}", alice.grades); println!("Alice's average: {:.2}", alice.average_grade()); } if let Some(grades) = tracker.get_grades("Bob") { println!("Bob's grades: {:?}", grades); }}
use std::collections::HashMap;#[derive(Debug)]pub struct Student { pub name: String, pub grades: Vec<u8>,}impl Student { pub fn add_grade(&mut self, grade: u8) { // Implement here self.grades.push(grade); } pub fn average_grade(&self) -> f64 { // Implement here if self.grades.is_empty() { return 0_f64 } self.grades.iter().sum::<u8>() as f64 /self.grades.len() as f64 }}pub struct StudentGrades { pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } pub fn add_student(&mut self, name: &str) { self.students.entry(name.to_string()).or_insert(Student { name: name.to_string(), grades: vec![], }); } pub fn add_grade(&mut self, name: &str, grade: u8) { if let Some(student) = self.students.get_mut(name) { student.add_grade(grade); } } pub fn get_grades(&self, name: &str) -> &[u8] { &self.students.get(name).unwrap().grades }}pub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); let alice = tracker.students.get_mut("Alice").unwrap(); alice.add_grade(95); println!("{:?}", alice.grades); println!("{:?}", alice.average_grade()); println!("{:?}", tracker.get_grades("Bob"));}
use std::collections::HashMap;pub struct Student { pub name: String, pub grades: Vec<u8>,}impl Student { pub fn add_grade(&mut self, grade: u8) { self.grades.push(grade); } pub fn average_grade(&self) -> f64 { let size = self.grades.len(); self.grades.iter().sum::<u8>() as f64 / size.max(1) as f64 }}pub struct StudentGrades { pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } pub fn add_student(&mut self, name: &str) { self.students.entry(name.to_string()).or_insert(Student { name: name.to_string(), grades: vec![], }); } pub fn add_grade(&mut self, name: &str, grade: u8) { if let Some(student) = self.students.get_mut(name) { student.add_grade(grade); } } pub fn get_grades(&self, name: &str) -> &[u8] { &self.students.get(name).unwrap().grades }}pub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); let alice = tracker.students.get_mut("Alice").unwrap(); alice.add_grade(95); println!("{:?}", alice.grades); println!("{:?}", alice.average_grade()); println!("{:?}", tracker.get_grades("Bob"));}
use std::collections::HashMap;pub struct Student { pub name: String, pub grades: Vec<u8>,}impl Student { pub fn add_grade(&mut self, grade: u8) { self.grades.push(grade); } pub fn average_grade(&self) -> f64 { let size = self.grades.len(); self.grades.iter().sum::<u8>() as f64 / size.max(1) as f64 }}pub struct StudentGrades { pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } pub fn add_student(&mut self, name: &str) { self.students.entry(name.to_string()).or_insert(Student { name: name.to_string(), grades: vec![], }); } pub fn add_grade(&mut self, name: &str, grade: u8) { if let Some(student) = self.students.get_mut(name) { student.add_grade(grade); } } pub fn get_grades(&self, name: &str) -> &[u8] { &self.students.get(name).unwrap().grades }}pub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); let alice = tracker.students.get_mut("Alice").unwrap(); alice.add_grade(95); println!("{:?}", alice.grades); println!("{:?}", alice.average_grade()); println!("{:?}", tracker.get_grades("Bob"));}
use std::collections::HashMap;pub struct Student { pub name: String, pub grades: Vec<u8>,}impl Student { pub fn add_grade(&mut self, grade: u8) { // Implement here self.grades.push(grade); } pub fn average_grade(&self) -> f64 { // Implement here if self.grades.is_empty() { return 0.0; } let mut sum = 0.0; for i in self.grades.iter() { sum += *i as f64 } sum / self.grades.len() as f64 }}pub struct StudentGrades { pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } pub fn add_student(&mut self, name: &str) { self.students.entry(name.to_string()).or_insert(Student { name: name.to_string(), grades: vec![], }); } pub fn add_grade(&mut self, name: &str, grade: u8) { if let Some(student) = self.students.get_mut(name) { student.add_grade(grade); } } pub fn get_grades(&self, name: &str) -> &[u8] { &self.students.get(name).unwrap().grades }}pub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); let alice = tracker.students.get_mut("Alice").unwrap(); alice.add_grade(95); println!("{:?}", alice.grades); println!("{:?}", alice.average_grade()); println!("{:?}", tracker.get_grades("Bob"));}
use std::collections::HashMap;pub struct Student { pub name: String, pub grades: Vec<u8>,}impl Student { pub fn add_grade(&mut self, grade: u8) { self.grades.push(grade); } pub fn average_grade(&self) -> f64 { if self.grades.is_empty() { 0.0 } else { let sum: u32 = self.grades.iter().map(|&grade| grade as u32).sum(); sum as f64 / self.grades.len() as f64 } }}pub struct StudentGrades { pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } pub fn add_student(&mut self, name: &str) { self.students.entry(name.to_string()).or_insert(Student { name: name.to_string(), grades: vec![], }); } pub fn add_grade(&mut self, name: &str, grade: u8) { if let Some(student) = self.students.get_mut(name) { student.add_grade(grade); } } pub fn get_grades(&self, name: &str) -> &[u8] { &self.students.get(name).unwrap().grades }}pub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); let alice = tracker.students.get_mut("Alice").unwrap(); alice.add_grade(95); println!("{:?}", alice.grades); println!("{:?}", alice.average_grade()); println!("{:?}", tracker.get_grades("Bob"));}
use std::collections::HashMap;pub struct Student { pub name: String, pub grades: Vec<u8>,}impl Student { pub fn add_grade(&mut self, grade: u8) { &self.grades.push(grade); } pub fn average_grade(&self) -> f64 { let mut x:f64 = 0.0; let mut ct: f64 = 0.0; if self.grades.is_empty(){ return 0.0; } for i in &self.grades{ x += *i as f64; ct += 1.0; } return x/ct; }}pub struct StudentGrades { pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } pub fn add_student(&mut self, name: &str) { self.students.entry(name.to_string()).or_insert(Student { name: name.to_string(), grades: vec![], }); } pub fn add_grade(&mut self, name: &str, grade: u8) { if let Some(student) = self.students.get_mut(name) { student.add_grade(grade); } } pub fn get_grades(&self, name: &str) -> &[u8] { &self.students.get(name).unwrap().grades }}pub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); let alice = tracker.students.get_mut("Alice").unwrap(); alice.add_grade(95); println!("{:?}", alice.grades); println!("{:?}", alice.average_grade()); println!("{:?}", tracker.get_grades("Bob"));}
use std::collections::HashMap;pub struct Student { pub name: String, pub grades: Vec<u8>,}impl Student { pub fn add_grade(&mut self, grade: u8) { // Implement here self.grades.push(grade); } pub fn average_grade(&self) -> f64 { // Implement here if self.grades.len() < 1 { return 0.0; } let mut sum = 0; for i in &self.grades { sum += i; } (sum as f64 / self.grades.len() as f64) }}pub struct StudentGrades { pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } pub fn add_student(&mut self, name: &str) { self.students.entry(name.to_string()).or_insert(Student { name: name.to_string(), grades: vec![], }); } pub fn add_grade(&mut self, name: &str, grade: u8) { if let Some(student) = self.students.get_mut(name) { student.add_grade(grade); } } pub fn get_grades(&self, name: &str) -> &[u8] { &self.students.get(name).unwrap().grades }}pub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); let alice = tracker.students.get_mut("Alice").unwrap(); alice.add_grade(95); println!("{:?}", alice.grades); println!("{:?}", alice.average_grade()); println!("{:?}", tracker.get_grades("Bob"));}