aboutsummaryrefslogtreecommitdiff
path: root/high-scores/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'high-scores/src/lib.rs')
-rw-r--r--high-scores/src/lib.rs29
1 files changed, 29 insertions, 0 deletions
diff --git a/high-scores/src/lib.rs b/high-scores/src/lib.rs
new file mode 100644
index 0000000..a7e6c3d
--- /dev/null
+++ b/high-scores/src/lib.rs
@@ -0,0 +1,29 @@
1#[derive(Debug)]
2pub struct HighScores<'a> {
3 scores: &'a [u32]
4}
5
6impl<'a> HighScores<'a> {
7 pub fn new(scores: &'a [u32]) -> Self {
8 HighScores{ scores }
9 }
10
11 pub fn scores(&self) -> &[u32] {
12 self.scores
13 }
14
15 pub fn latest(&self) -> Option<u32> {
16 self.scores.last().copied()
17 }
18
19 pub fn personal_best(&self) -> Option<u32> {
20 self.scores.iter().max().copied()
21 }
22
23 pub fn personal_top_three(&self) -> Vec<u32> {
24 let mut top3 = self.scores.to_vec();
25 top3.sort_unstable_by(|a,b| b.cmp(a));
26 top3.truncate(3);
27 top3
28 }
29}