use fitts::{CardState, FittsScheduler, Rating};
fn main() {
let mut scheduler = FittsScheduler::new();
let mut card = CardState::default();
println!("SM-2 Interval Progression\n");
println!("Rating: Good (quality=4)\n");
println!("{:>8} {:>10} {:>8}", "Review", "Interval", "Ease");
println!("{:-<30}", "");
for i in 1..=10 {
let result = scheduler.review(card, Rating::Good);
card = result.card;
println!(
"{:>8} {:>9.0}d {:>8.2}",
i, card.interval_days, card.ease_factor
);
}
println!("\n\nRating: Easy (quality=5)\n");
println!("{:>8} {:>10} {:>8}", "Review", "Interval", "Ease");
println!("{:-<30}", "");
let mut card = CardState::default();
for i in 1..=10 {
let result = scheduler.review(card, Rating::Easy);
card = result.card;
println!(
"{:>8} {:>9.0}d {:>8.2}",
i, card.interval_days, card.ease_factor
);
}
println!("\n\nLapse recovery (Again rating)\n");
println!(
"{:>8} {:>10} {:>8} {:>8}",
"Review", "Interval", "Ease", "Lapses"
);
println!("{:-<40}", "");
let mut card = CardState {
interval_days: 30.0,
ease_factor: 2.5,
repetitions: 5,
..Default::default()
};
println!(
"{:>8} {:>9.0}d {:>8.2} {:>8}",
"before", card.interval_days, card.ease_factor, card.lapses
);
for i in 1..=5 {
let rating = if i <= 2 { Rating::Again } else { Rating::Good };
let result = scheduler.review(card, rating);
card = result.card;
println!(
"{:>8} {:>9.0}d {:>8.2} {:>8}",
i, card.interval_days, card.ease_factor, card.lapses
);
}
}