diff -r 3d9dba5b16e0 -r a2f0cb2b5c13 src/card.rs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/card.rs Tue Jan 31 23:25:50 2023 +0100 @@ -0,0 +1,70 @@ +use core::fmt; + +/*** Card ****/ +#[derive(Debug)] +pub struct Card { + pub value: i8, + pub points: i8, +} + +impl Card { + pub fn new(value: i8)->Self { + + let mut points = 0; + if value % 10 == 5 { + // ends with 5 = 2 point + points = 2; + // println!("*5 add 1, val={}, pt={}", value, points); + } + + if value % 10 == 0 { + // ends with 0 = 3 point + points = 3; + // println!("*0 add 2, val={}, pt={}", value, points); + } + + if value % 10 == value / 10 { + // same numbers = 5 points (55=7) + points += 5; + // println!("NN add 5, val={}, pt={}", value, points); + } + + if points == 0 { + points = 1; + } + + Card { + value, + points, + } + } +} + +impl fmt::Display for Card { + fn fmt( &self, f: &mut fmt::Formatter ) -> fmt::Result { + write!(f, "(Card {}, points {})", self.value, self.points) + } +} + +impl PartialEq for Card { + fn eq(&self, other: &Self) -> bool { + self.value == other.value + } +} + +impl Eq for Card {} + +impl PartialOrd for Card { + fn partial_cmp(&self, other: &Self) -> Option { + match self.value.partial_cmp(&other.value) { + Some(core::cmp::Ordering::Equal) => {None} + ord => return ord, + } + } +} + +impl Ord for Card { + fn cmp(&self, other: &Self) -> std::cmp::Ordering { + self.value.cmp(&other.value) + } +}