Skip to content

Commit

Permalink
Assign only one activity per attempt in case of rounds with distribut…
Browse files Browse the repository at this point in the history
…ed attempts
  • Loading branch information
jonatanklosko committed May 3, 2019
1 parent 0b08cf0 commit 33ff21b
Showing 1 changed file with 17 additions and 4 deletions.
21 changes: 17 additions & 4 deletions src/logic/groups.js
Original file line number Diff line number Diff line change
Expand Up @@ -59,10 +59,23 @@ const assignGroups = (wcif, roundsToAssign) => {
return sortedRoundsToAssign.reduce((wcif, round) => {
const competitors = sortedCompetitorsForRound(wcif, round.id);
if (hasDistributedAttempts(round.id)) {
/* In this case roundActivities are attempt activities, so we assign them all to the given person. */
const updatedCompetitors = roundActivities(wcif, round.id).reduce((competitors, activity) =>
assignActivity(activity.id, 'competitor', competitors)
, competitors);
/* In this case roundActivities are attempt activities.
We want every competitor to be assigned all attempts.
The same attempt may take place in many different rooms,
so for each attempt we split people among this attempt's activities. */
const activitiesByAttempt = groupBy(
roundActivities(wcif, round.id),
({ activityCode }) => parseActivityCode(activityCode).attemptNumber
);
const updatedCompetitors = Object.values(activitiesByAttempt)
.reduce((competitors, attemptActivities) => {
const competitorsPerActivity = Math.ceil(competitors.length / attemptActivities.length);
const activitiesWithCompetitors = zip(attemptActivities, chunk(competitors, competitorsPerActivity));
return flatMap(
activitiesWithCompetitors,
([activity, competitors]) => assignActivity(activity.id, 'competitor', competitors)
);
}, competitors)
return updatePeople(wcif, updatedCompetitors);
}
const initialGroups = sortedGroupActivitiesWithSize(wcif, round.id, competitors.length)
Expand Down

0 comments on commit 33ff21b

Please sign in to comment.