From e218f64b3b72841be40042991db304d08aa83e97 Mon Sep 17 00:00:00 2001 From: user1823 <92206575+user1823@users.noreply.github.com> Date: Sun, 24 Aug 2025 15:51:24 +0530 Subject: [PATCH] Increase randomness in random sorting of new cards Currently, the new cards appear roughly in the same order on consecutive days (if they are skipped by burying). This change aims to increase randomness by spreading out the salt across the hash space. --- rslib/src/scheduler/queue/builder/gathering.rs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/rslib/src/scheduler/queue/builder/gathering.rs b/rslib/src/scheduler/queue/builder/gathering.rs index fb6274de5..8517d9d24 100644 --- a/rslib/src/scheduler/queue/builder/gathering.rs +++ b/rslib/src/scheduler/queue/builder/gathering.rs @@ -61,13 +61,14 @@ impl QueueBuilder { } fn gather_new_cards(&mut self, col: &mut Collection) -> Result<()> { + let salt = knuth_salt(self.context.timing.days_elapsed); match self.context.sort_options.new_gather_priority { NewCardGatherPriority::Deck => { self.gather_new_cards_by_deck(col, NewCardSorting::LowestPosition) } NewCardGatherPriority::DeckThenRandomNotes => self.gather_new_cards_by_deck( col, - NewCardSorting::RandomNotes(self.context.timing.days_elapsed), + NewCardSorting::RandomNotes(salt), ), NewCardGatherPriority::LowestPosition => { self.gather_new_cards_sorted(col, NewCardSorting::LowestPosition) @@ -77,11 +78,11 @@ impl QueueBuilder { } NewCardGatherPriority::RandomNotes => self.gather_new_cards_sorted( col, - NewCardSorting::RandomNotes(self.context.timing.days_elapsed), + NewCardSorting::RandomNotes(salt), ), NewCardGatherPriority::RandomCards => self.gather_new_cards_sorted( col, - NewCardSorting::RandomCards(self.context.timing.days_elapsed), + NewCardSorting::RandomCards(salt), ), } } @@ -169,4 +170,10 @@ impl QueueBuilder { true } } + + // Generates a salt for use with fnvhash. Useful to increase randomness + // when the base salt is a small integer. + fn knuth_salt(base_salt: u32) -> u32 { + base_salt.wrapping_mul(2654435761) + } }