aboutsummaryrefslogtreecommitdiff
path: root/src/app.rs
diff options
context:
space:
mode:
authorMroik <mroik@delayed.space>2025-01-29 05:30:17 +0100
committerMroik <mroik@delayed.space>2025-02-01 19:34:40 +0100
commitea1c3c4ee3868865fcd449592fc442208ba0a155 (patch)
tree3a2604b03f5105aaf33ba346f03d68b15301a25a /src/app.rs
parentdd4a5163ee3ab213ec52f1edd1d990376192d726 (diff)
Add accuracy stat
Diffstat (limited to 'src/app.rs')
-rw-r--r--src/app.rs17
1 files changed, 16 insertions, 1 deletions
diff --git a/src/app.rs b/src/app.rs
index 602af97..2e3ce53 100644
--- a/src/app.rs
+++ b/src/app.rs
@@ -52,6 +52,7 @@ pub struct App<'a> {
should_render: bool,
start: Option<Instant>,
completed: bool,
+ mistakes: u32,
}
impl App<'_> {
@@ -67,6 +68,7 @@ impl App<'_> {
should_render: true,
start: None,
completed: false,
+ mistakes: 0,
}
}
@@ -93,6 +95,7 @@ impl App<'_> {
+ self.quote.len() as f64
- 1.0;
let wpm = total_chars / 5.0 * 60000.0 / time as f64;
+ let accuracy = total_chars * 100.0 / (total_chars + self.mistakes as f64);
input_ks_tx.send(()).await?;
tick_ks_tx.send(()).await?;
@@ -100,7 +103,12 @@ impl App<'_> {
disable_raw_mode()?;
self.stdout.execute(LeaveAlternateScreen)?;
if self.completed {
- println!("Your WPM: {}", wpm.round());
+ println!(
+ "Your stats\nWPM: {}\nAccuracy: {}\nMistakes: {}",
+ wpm.round(),
+ accuracy,
+ self.mistakes
+ );
}
return Ok(());
}
@@ -136,6 +144,10 @@ impl App<'_> {
== self.quote[self.state.current];
let is_text_completed = self.state.buffer == self.quote[self.state.current]
&& self.state.current == self.quote.len() - 1;
+ let is_correct = self.state.buffer.chars().count()
+ <= self.quote[self.state.current].chars().count()
+ && self.state.buffer.chars().last().unwrap()
+ == self.quote[self.state.current].chars().last().unwrap();
if is_word_completed && k == ' ' {
self.state.buffer.clear();
@@ -143,7 +155,10 @@ impl App<'_> {
} else if is_text_completed {
self.running = false;
self.completed = true;
+ } else if !is_correct {
+ self.mistakes += 1;
}
+
return Ok(());
}
XMR address: 854DmXNrxULU3ZFJVs4Wc8PFhbq29RhqHhY8W6cdWrtFN3qmooKyyeYPcDzZTNRxphhJ5UzASQfAdEMwSteVqymk28aLhqj