/* Vi kigger på en request og gennemgår lokaler for at finde et match. Når vi finder et match * opretter vi et nyt objekt med gruppeid og klasseid og lægger på en liste matchedRequests. * Konkret: * int i sættes til 0. Hvis listen af stillNotfulfilled er længere end 0 OG listen af lokaler er * større end 0 så undersøg for requestCode = requestMatch. * (Finder kun == og ikke de lokaler som er større som matcher, da det ikke er alle lokaler med en større * kode, der vil matche) Findes et match så dannes det ny objekt og lægges på en liste og lokalets * requestMatch nedskrives, size nedskrives og groupcount tælles op. Hvis GroupCount er >= 3 fjernes * dette lokale fra lokalelisten. (Oprindelig var kravet at der ikke måtte være flere end 3 grupper * eller flere end 18 mennesker i et klasselokale, men da vi har sat max på gruppestørrelser til 7 (en * dropdown) vil det ikke være relevant at tælle på antal personer. Til sidst sættes i til 0 så alle lokaler * igen køres igennem. Hvis der ikke fandtes match så i++ så næste lokale tjekkes. * VI MANGLER AT REQUESTKODEN OGSÅ KAN VÆRE == 7. Det vil alle være tilfredse med. */ public void doTheFunkyAlgorythm(List <RequestClassroom> stillNotFulfilled, List <ClassRoom> lessThanThree) { dBCtrl.ClearRents(); List <int> notFulfilled = new List <int>(); List <RequestMatch> matchedRequests = new List <RequestMatch>(); int i = 0; while (lessThanThree.Count > 0 && stillNotFulfilled.Count > 0) { if ((lessThanThree[i].RequestMatch & stillNotFulfilled[0].RequestCode) == stillNotFulfilled[i].RequestCode) { RequestMatch requestMatch = new RequestMatch(stillNotFulfilled[0].GroupId, lessThanThree[i].Id); matchedRequests.Add(requestMatch); lessThanThree[i].RequestMatch -= stillNotFulfilled[0].RequestCode; lessThanThree[i].Size -= stillNotFulfilled[0].GroupSize; stillNotFulfilled.Remove(stillNotFulfilled[0]); lessThanThree[i].GroupCount++; if (lessThanThree[i].GroupCount >= 3) { lessThanThree.Remove(lessThanThree[i]); } i = 0; } else { i++; if (lessThanThree.Count <= i) { notFulfilled.Add(stillNotFulfilled[0].GroupId); stillNotFulfilled.Remove(stillNotFulfilled[0]); i = 0; } } } rCtrl.RentClassRooms(matchedRequests); List <int> groupIds = new List <int>(); List <int> classroomIds = new List <int>(); foreach (RequestMatch rm in matchedRequests) { groupIds.Add(rm.GroupId); classroomIds.Add(rm.ClassroomId); } Mail mail = new Mail(groupIds, classroomIds, notFulfilled); }