Esempio n. 1
0
        /// <summary>
        /// Calculates the number of days the schedule has classes on
        /// </summary>
        /// <param name="schedule">A schedule of classes</param>
        /// <returns> the number of days in the schedule</returns>
        protected static int NumDays(List <Section> schedule)
        {
            int numDays = 0;

            var allDays = schedule.SelectMany(s => s.Meetings)
                          .Where(m => !FormatRepo.IsOneTimeEvent(m.MeetingType))
                          .Select(m => m.Days);

            List <Days> days = Enum.GetValues(typeof(Days)).Cast <Days>().ToList();

            foreach (var day in days)
            {
                if (allDays.Any(d => d.HasFlag(day)))
                {
                    numDays++;
                }
            }

            return(numDays);
        }
Esempio n. 2
0
        /// <summary>
        /// Calculates the total gap size for a schedule.
        /// </summary>
        /// <param name="schedule">Schedule of classes</param>
        /// <returns>The total time gaps for a particular schedule</returns>
        protected static TimeSpan TotalGap(List <Section> schedule)
        {
            TimeSpan        gap       = new TimeSpan(0);
            List <DateTime> Monday    = new List <DateTime>();
            List <DateTime> Tuesday   = new List <DateTime>();
            List <DateTime> Wednesday = new List <DateTime>();
            List <DateTime> Thursday  = new List <DateTime>();
            List <DateTime> Friday    = new List <DateTime>();

            var allMeetings = schedule.SelectMany(s => s.Meetings);

            foreach (Meeting meeting in allMeetings)
            {
                if (!FormatRepo.IsOneTimeEvent(meeting.MeetingType) &&
                    meeting.StartTime.Hour != 0 &&
                    meeting.EndTime.Hour != 0)
                {
                    if (meeting.Days.HasFlag(Days.Monday))
                    {
                        Monday.Add(meeting.StartTime);
                        Monday.Add(meeting.EndTime);
                    }
                    if (meeting.Days.HasFlag(Days.Tuesday))
                    {
                        Tuesday.Add(meeting.StartTime);
                        Tuesday.Add(meeting.EndTime);
                    }
                    if (meeting.Days.HasFlag(Days.Wednesday))
                    {
                        Wednesday.Add(meeting.StartTime);
                        Wednesday.Add(meeting.EndTime);
                    }
                    if (meeting.Days.HasFlag(Days.Thursday))
                    {
                        Thursday.Add(meeting.StartTime);
                        Thursday.Add(meeting.EndTime);
                    }
                    if (meeting.Days.HasFlag(Days.Friday))
                    {
                        Friday.Add(meeting.StartTime);
                        Friday.Add(meeting.EndTime);
                    }
                }
            }

            // Sort the class times in each schedule by start time.
            Monday.Sort();
            Tuesday.Sort();
            Wednesday.Sort();
            Thursday.Sort();
            Friday.Sort();

            // Calculate the gaps in the schedule.
            for (int i = 1; i < Monday.Count - 1; i += 2)
            {
                gap += (Monday[i + 1].TimeOfDay - Monday[i].TimeOfDay);
            }

            for (int i = 1; i < Tuesday.Count - 1; i += 2)
            {
                gap += (Tuesday[i + 1].TimeOfDay - Tuesday[i].TimeOfDay);
            }

            for (int i = 1; i < Wednesday.Count - 1; i += 2)
            {
                gap += (Wednesday[i + 1].TimeOfDay - Wednesday[i].TimeOfDay);
            }

            for (int i = 1; i < Thursday.Count - 1; i += 2)
            {
                gap += (Thursday[i + 1].TimeOfDay - Thursday[i].TimeOfDay);
            }

            for (int i = 1; i < Friday.Count - 1; i += 2)
            {
                gap += (Friday[i + 1].TimeOfDay - Friday[i].TimeOfDay);
            }

            return(gap);
        }