mirror of
https://github.com/ankitects/anki.git
synced 2025-11-06 12:47:11 -05:00
Sort never attempted cards randomly
This commit is contained in:
parent
e97a3a15a7
commit
fd4e8457d8
1 changed files with 11 additions and 3 deletions
|
|
@ -9,7 +9,9 @@ mod sorting;
|
||||||
|
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use std::collections::VecDeque;
|
use std::collections::VecDeque;
|
||||||
|
use std::hash::Hasher;
|
||||||
|
|
||||||
|
use fnv::FnvHasher;
|
||||||
use intersperser::Intersperser;
|
use intersperser::Intersperser;
|
||||||
use sized_chain::SizedChain;
|
use sized_chain::SizedChain;
|
||||||
|
|
||||||
|
|
@ -278,13 +280,19 @@ fn merge_new(
|
||||||
|
|
||||||
fn sort_learning(learning: Vec<DueCard>) -> VecDeque<LearningQueueEntry> {
|
fn sort_learning(learning: Vec<DueCard>) -> VecDeque<LearningQueueEntry> {
|
||||||
// Prioritize intraday learning cards that were previously attempted
|
// Prioritize intraday learning cards that were previously attempted
|
||||||
// (reps > 0) before never-attempted cards (reps == 0). Preserve due-time
|
// (reps > 0) before never-attempted cards (reps == 0). Sort previously
|
||||||
// ordering within each group.
|
// attempted cards by due-time and never-attempted cards deterministically
|
||||||
|
// by an FNV hash of their id.
|
||||||
let (mut previously_attempted, mut never_attempted): (Vec<DueCard>, Vec<DueCard>) =
|
let (mut previously_attempted, mut never_attempted): (Vec<DueCard>, Vec<DueCard>) =
|
||||||
learning.into_iter().partition(|c| c.reps > 0);
|
learning.into_iter().partition(|c| c.reps > 0);
|
||||||
|
|
||||||
previously_attempted.sort_unstable_by(|a, b| a.due.cmp(&b.due));
|
previously_attempted.sort_unstable_by(|a, b| a.due.cmp(&b.due));
|
||||||
never_attempted.sort_unstable_by(|a, b| a.due.cmp(&b.due));
|
|
||||||
|
never_attempted.sort_unstable_by_key(|c| {
|
||||||
|
let mut hasher = FnvHasher::default();
|
||||||
|
hasher.write_i64(c.id.0);
|
||||||
|
hasher.finish()
|
||||||
|
});
|
||||||
|
|
||||||
previously_attempted
|
previously_attempted
|
||||||
.into_iter()
|
.into_iter()
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue