fitts 0.2.1

Spaced repetition scheduler using Fitts' Law for difficulty prediction and SM-2 for interval scheduling.
Documentation
//! Basic usage example.

use fitts::{CardState, Rating, Scheduler, SchedulerConfig};

fn main() {
    let mut scheduler = Scheduler::new(SchedulerConfig::default());

    // Add cards to a deck
    scheduler.add_card("vocabulary", "apple", CardState::default());
    scheduler.add_card("vocabulary", "house", CardState::default());
    scheduler.add_card("vocabulary", "car", CardState::default());

    // Get due cards (ordered by difficulty)
    let due = scheduler.get_due_cards("vocabulary").unwrap();
    println!("Due cards: {}", due.len());

    for card in &due {
        println!(
            "  {} - difficulty: {:?}, predicted RT: {:.2}s",
            card.card_id, card.difficulty, card.predicted_rt
        );
    }

    // Review cards
    for card in due {
        let result = scheduler
            .review("vocabulary", &card.card_id, Rating::Good)
            .unwrap();
        println!(
            "Reviewed {} - next interval: {} days",
            card.card_id, result.card.interval_days
        );
    }

    // Check deck stats
    let stats = scheduler.deck_stats("vocabulary").unwrap();
    println!("\nDeck stats:");
    println!("  Total: {}", stats.total);
    println!("  Due: {}", stats.due);
    println!("  New: {}", stats.new);
    println!("  Learning: {}", stats.learning);
    println!("  Mature: {}", stats.mature);
}