Can get the size of the smallest unsunk boat
This commit is contained in:
parent
dd0ca5941a
commit
7cfd7a4899
@ -194,6 +194,19 @@ impl CurrentGameStatus {
|
|||||||
None
|
None
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Get the size of the smallest un-sunk boat
|
||||||
|
pub fn get_size_of_smallest_un_sunk_boat(&self) -> Option<usize> {
|
||||||
|
let mut boats_size = self.rules.boats_list();
|
||||||
|
boats_size.sort();
|
||||||
|
|
||||||
|
for boat in &self.opponent_map.sunk_boats {
|
||||||
|
let index = boats_size.iter().position(|b| *b == boat.len)?;
|
||||||
|
boats_size.remove(index);
|
||||||
|
}
|
||||||
|
|
||||||
|
boats_size.first().cloned()
|
||||||
|
}
|
||||||
|
|
||||||
pub fn print_your_map(&self) {
|
pub fn print_your_map(&self) {
|
||||||
PrintableCurrentGameMapStatus(self.rules.clone(), self.your_map.clone()).print_map()
|
PrintableCurrentGameMapStatus(self.rules.clone(), self.your_map.clone()).print_map()
|
||||||
}
|
}
|
||||||
@ -292,4 +305,40 @@ mod test {
|
|||||||
assert!(next_fire.is_some());
|
assert!(next_fire.is_some());
|
||||||
assert!(possible_next_strikes.contains(&next_fire.unwrap()))
|
assert!(possible_next_strikes.contains(&next_fire.unwrap()))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn get_size_of_smallest_unsunk_boat_start_of_game() {
|
||||||
|
let status = CurrentGameStatus::default();
|
||||||
|
let min_val = *status.rules.boats_list().iter().min().unwrap();
|
||||||
|
assert_eq!(min_val, status.get_size_of_smallest_un_sunk_boat().unwrap());
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn get_size_of_smallest_unsunk_boat_bigger_boat_sunk() {
|
||||||
|
let mut status = CurrentGameStatus::default();
|
||||||
|
let min_val = *status.rules.boats_list().iter().min().unwrap();
|
||||||
|
|
||||||
|
status.opponent_map.sunk_boats.push(BoatPosition {
|
||||||
|
start: Coordinates::new(0, 0),
|
||||||
|
len: min_val + 1,
|
||||||
|
direction: BoatDirection::Left,
|
||||||
|
});
|
||||||
|
assert_eq!(min_val, status.get_size_of_smallest_un_sunk_boat().unwrap());
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn get_size_of_smallest_unsunk_boat_smallest_boat_sunk() {
|
||||||
|
let mut status = CurrentGameStatus::default();
|
||||||
|
let mut boats_size = status.rules.boats_list();
|
||||||
|
boats_size.sort();
|
||||||
|
status.opponent_map.sunk_boats.push(BoatPosition {
|
||||||
|
start: Coordinates::new(0, 0),
|
||||||
|
len: boats_size[0],
|
||||||
|
direction: BoatDirection::Left,
|
||||||
|
});
|
||||||
|
assert_eq!(
|
||||||
|
boats_size[1],
|
||||||
|
status.get_size_of_smallest_un_sunk_boat().unwrap()
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user