using Core.Entities; namespace Core.Calculation; public class TeamSchedulerSolution( Team[][] timeSlots, string status) { public Team[][] TimeSlots { get; set; } = timeSlots; public string Status { get; set; } = status; public static int GetStudentTeamOverlapCount(Team[][] timeSlots) { return timeSlots.Sum(GetStudentTeamOverlapCount); } private static int GetStudentTeamOverlapCount(Team[] timeSlot) { return GetStudentTeamOverlaps(timeSlot).Count(); } public static IEnumerable>> GetStudentTeamOverlaps(Team[] timeSlot) { return from s in timeSlot.SelectMany(ts => ts.Students).Distinct() group s by timeSlot.Where(t => t.Students.Contains(s)) into gs where gs.Key.Count() > 1 select Tuple.Create(gs.First(), gs.Key); } public static Student[] GetStudentsNotInTimSlot(Team[] timeSlot, Student[] students) { var studentsInTimeSlot = timeSlot.SelectMany(ts => ts.Students).Distinct(); return (from allStudent in students where studentsInTimeSlot.FirstOrDefault(e => e.Equals(allStudent)) == null select allStudent ).ToArray(); } }