From c8e67a5c89d7c719370079dc3af1f1904cc36942 Mon Sep 17 00:00:00 2001 From: ggurdin <46800240+ggurdin@users.noreply.github.com> Date: Tue, 23 Sep 2025 09:40:21 -0400 Subject: [PATCH] chore: shuffle practice tokens before selecting the ones to include (#4097) --- .../practice_activities/practice_match.dart | 2 +- .../practice_activities/practice_selection.dart | 16 +++++++++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/lib/pangea/practice_activities/practice_match.dart b/lib/pangea/practice_activities/practice_match.dart index 34df11014..e65efb164 100644 --- a/lib/pangea/practice_activities/practice_match.dart +++ b/lib/pangea/practice_activities/practice_match.dart @@ -32,7 +32,7 @@ class PracticeMatchActivity { final String choiceContent = matchEntry.value.firstWhere( (element) => !usedForms.contains(element), orElse: () => throw Exception( - "No unique form available for construct ${matchEntry.key}", + "No unique form available for construct ${matchEntry.key.form}", ), ); diff --git a/lib/pangea/practice_activities/practice_selection.dart b/lib/pangea/practice_activities/practice_selection.dart index a53180fe2..facd6ea4d 100644 --- a/lib/pangea/practice_activities/practice_selection.dart +++ b/lib/pangea/practice_activities/practice_selection.dart @@ -160,10 +160,24 @@ class PracticeSelection { return []; } + final List activityTokens = []; + tokens.shuffle(); + for (final t in tokens) { + if (activityTokens.length >= _maxQueueLength) { + break; + } + if (!activityTokens.any( + (token) => + token.text.content.toLowerCase() == t.text.content.toLowerCase(), + )) { + activityTokens.add(t); + } + } + return [ PracticeTarget( activityType: activityType, - tokens: tokens.take(_maxQueueLength).shuffled().toList(), + tokens: activityTokens, userL2: _userL2, ), ];