use fitts::FittsModel;
fn main() {
let model = FittsModel::new(0.5, 0.3);
println!("Fitts' Law Memory Model");
println!("RT = a + b × log₂(distance / accessibility + 1)\n");
println!("Response Time by Interval and Ease:\n");
println!(
"{:>10} {:>8} {:>8} {:>8}",
"Interval", "Low EF", "Mid EF", "High EF"
);
println!("{:-<40}", "");
for interval in [1.0, 7.0, 14.0, 30.0, 60.0, 90.0] {
let low = model.response_time(interval, 1.5, interval);
let mid = model.response_time(interval, 2.0, interval);
let high = model.response_time(interval, 2.5, interval);
println!(
"{:>9.0}d {:>7.2}s {:>7.2}s {:>7.2}s",
interval, low, mid, high
);
}
println!("\n\nRetrievability by Interval:\n");
println!("{:>10} {:>12} {:>12}", "Interval", "Ease 1.5", "Ease 2.5");
println!("{:-<40}", "");
for interval in [1.0, 7.0, 14.0, 30.0, 60.0, 90.0, 180.0, 365.0] {
let r_low = model.retrievability(interval, 1.5, interval);
let r_high = model.retrievability(interval, 2.5, interval);
println!(
"{:>9.0}d {:>11.1}% {:>11.1}%",
interval,
r_low * 100.0,
r_high * 100.0
);
}
println!("\n\nDifficulty Classification (4 levels):\n");
println!(" Easy: RT < 4s → expects Rating::Easy");
println!(" Medium: RT 4-10s → expects Rating::Good");
println!(" Hard: RT 10-20s → expects Rating::Hard");
println!(" VeryHard: RT ≥ 20s → expects Rating::Again");
}