private void AddDiversToDiveSchedule(DiveAlgorithmProduct algorithm) { string date = ""; // Order dive schedules by date ascending then descending by number of divers diveSchedule = diveSchedule.OrderBy(x => x.date).ThenByDescending(x => x.numOfDivers).ToList(); // Generate random divers list for each dive // and assign each diver to group of 2 or 3 divers for (int i = 0; i < diveSchedule.Count(); i++) { // if dive is on same day as previous one then use same list of divers if (diveSchedule[i].date.Equals(date)) { diveSchedule[i].divers = new List <Diver>(diveSchedule[i - 1].divers); // if there's less divers then on previous dive on same day then remove N divers from list if (diveSchedule[i].divers.Count() > diveSchedule[i].numOfDivers) { diveSchedule[i].divers.RemoveRange(diveSchedule[i].numOfDivers - 1, diveSchedule[i].divers.Count() - diveSchedule[i].numOfDivers); } } else { diveSchedule[i].setDivers(divers, random, diveSchedule[i].numOfDivers); } List <PairHelper> diveGroup = algorithm.GetDivePairs(diveSchedule[i].divers, diveSchedule[i]); diveSchedule[i].setDiveGroups(diveGroup); date = diveSchedule[i].date; } }
public void Init() { string[] diversRaw = ReadFile(diversFilePath); string[] scheduleRaw = ReadFile(diveScheduleFilePath); outFilePath = GetOutFilePath(outFilePath); if (diversRaw != null && scheduleRaw != null) { AddDiversToList(diversRaw); AddDiveSchedule(scheduleRaw); DivingClubSingleton divingClub = DivingClubSingleton.GetInstance(); DiveAlgorithmFactory diveFactory = new DiveAlgorithmFactory(); DiveAlgorithmProduct algorithm = diveFactory.createAlgorithm(algorithmName); AddDiversToDiveSchedule(algorithm); Writer.CreateFile(outFilePath); Writer.WriteDiveSchedule(diveSchedule.AsEnumerable(), outFilePath); Writer.WriteDivers(divers.AsEnumerable(), outFilePath); } }