use std::fmt; const MINUTES_PER_HOUR: i32 = 60; const HOURS_PER_DAY: i32 = 24; const MINUTES_PER_DAY: i32 = MINUTES_PER_HOUR * HOURS_PER_DAY; #[derive(Debug, PartialEq)] pub struct Clock { minutes: i32, } impl Clock { pub fn new(hours: i32, minutes: i32) -> Self { Self { minutes: (hours * MINUTES_PER_HOUR + minutes).rem_euclid(MINUTES_PER_DAY), } } pub fn add_minutes(&self, minutes: i32) -> Self { Self::new(0, self.minutes + minutes) } fn minutes(&self) -> i32 { self.minutes % MINUTES_PER_HOUR } fn hours(&self) -> i32 { self.minutes / MINUTES_PER_HOUR } } impl fmt::Display for Clock { fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result { write!(formatter, "{:02}:{:02}", self.hours(), self.minutes()) } }