aboutsummaryrefslogtreecommitdiff
path: root/srchr/src/evaluation.rs
diff options
context:
space:
mode:
authortslil clingman <tslil@posteo.de>2022-10-22 16:34:58 +0200
committertslil clingman <tslil@posteo.de>2022-10-22 18:59:15 +0200
commit5f3c2fbd14dd1dc3fd78df31c8150ee5ec2bdc64 (patch)
tree0e00e4f3debf79c7280fc17a265651127fc26fca /srchr/src/evaluation.rs
parentf6d4be2195a9103e42b00c9aa362c62d079c3f4e (diff)
add lsb calculation (cannot optimised for with prelayouts)
Diffstat (limited to 'srchr/src/evaluation.rs')
-rw-r--r--srchr/src/evaluation.rs27
1 files changed, 26 insertions, 1 deletions
diff --git a/srchr/src/evaluation.rs b/srchr/src/evaluation.rs
index 3d171b0..6621700 100644
--- a/srchr/src/evaluation.rs
+++ b/srchr/src/evaluation.rs
@@ -94,6 +94,7 @@ pub struct Evaluation {
keypress_perc: [f32; NUM_KEYS],
sfb: [f32; 8],
dsfb: [f32; 8],
+ lsb: f32,
}
impl Evaluation {
@@ -101,6 +102,7 @@ impl Evaluation {
let mut keypress_perc: [f32; NUM_KEYS] = [0.0; NUM_KEYS];
let mut sfb: [f32; 8] = [0.0; 8];
let mut dsfb: [f32; 8] = [0.0; 8];
+ let mut lsb = 0.0;
for (i, &c) in layout.get_keys().iter().enumerate() {
keypress_perc[i] = corpus.get_character_perc(c as u8);
@@ -180,10 +182,32 @@ impl Evaluation {
}
}
+ // LSB for index-middle only
+ for left in [true, false] {
+ let mind = if left { 2 } else { 7 };
+ let iind = if left { 4 } else { 5 };
+ let m1 = layout.get_key(mind + 10 * 0);
+ let m2 = layout.get_key(mind + 10 * 1);
+ let m3 = layout.get_key(mind + 10 * 2);
+ let i1 = layout.get_key(iind + 10 * 0);
+ let i2 = layout.get_key(iind + 10 * 1);
+ let i3 = layout.get_key(iind + 10 * 2);
+ lsb += corpus.get_bigram_perc(m1, i1)
+ + corpus.get_bigram_perc(m1, i2)
+ + corpus.get_bigram_perc(m1, i3)
+ + corpus.get_bigram_perc(m2, i1)
+ + corpus.get_bigram_perc(m2, i2)
+ + corpus.get_bigram_perc(m2, i3)
+ + corpus.get_bigram_perc(m3, i1)
+ + corpus.get_bigram_perc(m3, i2)
+ + corpus.get_bigram_perc(m3, i3);
+ }
+
return Evaluation {
keypress_perc,
sfb,
dsfb,
+ lsb,
};
}
@@ -210,7 +234,7 @@ impl Evaluation {
}
}
- result += &format!("\nHand usage: {:.2}% vs {:.2}%", lh, rh);
+ result += &format!("\nHand usage: {:.2}% vs {:.2}%", lh * 100.0, rh * 100.0);
result += "\nSFB distribution : ";
for (i, &u) in self.sfb.iter().enumerate() {
@@ -226,6 +250,7 @@ impl Evaluation {
let dsfb = self.dsfb.iter().sum::<f32>();
result += &format!("\nTotal sfb: {:.3}%", sfb * 100.0);
result += &format!("\nTotal dsfb: {:.3}%", dsfb * 100.0);
+ result += &format!("\nTotal lsb: {:.3}%", self.lsb * 100.0);
return result;
}