From fd4e8457d836b17716dee5a71e7da4cf76a7d2ab Mon Sep 17 00:00:00 2001 From: user1823 <92206575+user1823@users.noreply.github.com> Date: Thu, 16 Oct 2025 19:04:25 +0530 Subject: [PATCH] Sort never attempted cards randomly --- rslib/src/scheduler/queue/builder/mod.rs | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/rslib/src/scheduler/queue/builder/mod.rs b/rslib/src/scheduler/queue/builder/mod.rs index 1cd29744d..c4126db9d 100644 --- a/rslib/src/scheduler/queue/builder/mod.rs +++ b/rslib/src/scheduler/queue/builder/mod.rs @@ -9,7 +9,9 @@ mod sorting; use std::collections::HashMap; use std::collections::VecDeque; +use std::hash::Hasher; +use fnv::FnvHasher; use intersperser::Intersperser; use sized_chain::SizedChain; @@ -278,13 +280,19 @@ fn merge_new( fn sort_learning(learning: Vec) -> VecDeque { // Prioritize intraday learning cards that were previously attempted - // (reps > 0) before never-attempted cards (reps == 0). Preserve due-time - // ordering within each group. + // (reps > 0) before never-attempted cards (reps == 0). Sort previously + // 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, Vec) = learning.into_iter().partition(|c| c.reps > 0); 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 .into_iter()