Skip to content

Commit 5fd31f8

Browse files
authored
feat: update partner selection logic to use weighted randomization
1 parent 435eb91 commit 5fd31f8

File tree

1 file changed

+12
-6
lines changed
  • apps/site/components/Common/Partners

1 file changed

+12
-6
lines changed

apps/site/components/Common/Partners/utils.ts

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,20 +27,26 @@ function randomPartnerList(
2727
const seed = fixedTime.getTime();
2828
const rng = mulberry32(seed);
2929

30+
const weightedPartners = partners.flatMap(partner => {
31+
if (category && !partner.categories.includes(category)) return [];
32+
const weight = partner.weight;
33+
return Array(weight).fill(partner);
34+
});
35+
3036
// Create a copy of the array to avoid modifying the original
31-
let shuffled = [...partners]
32-
.filter(partner => !category || partner.categories.includes(category))
33-
.sort(() => rng() - 0.5);
37+
const shuffled = [...weightedPartners].sort(() => rng() - 0.5);
38+
39+
// Remove duplicates while preserving order
40+
const unique = Array.from(new Set(shuffled));
3441

3542
if (pick !== null) {
36-
shuffled = shuffled.slice(0, pick);
43+
return unique.slice(0, pick);
3744
}
3845

39-
return shuffled;
46+
return unique;
4047
}
4148

4249
// This function returns a random list of partners based on a fixed time seed
43-
4450
function mulberry32(seed: number) {
4551
return function () {
4652
let t = (seed += 0x6d2b79f5);

0 commit comments

Comments
 (0)