Работа с датами - расписание сериала - C#
Формулировка задачи:
Новый телевизионный сериал начинается с первого понедельника февраля 2016 года. Сериал идет четыре раза в неделю по понедельникам, вторникам, средам и четвергам, исключая следующие праздники 23 февраля, 8 марта, 1 мая и 9 мая. Выведите дни, в которых можно посмотреть сериал и определите количество серий, которые надо показать до 1 июня 2016 года.
Решение задачи: «Работа с датами - расписание сериала»
textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
DateTime[] holidays = new DateTime[]{ new DateTime(2016, 02, 23), new DateTime(2016, 03, 08),
new DateTime(2016, 05, 01), new DateTime(2016, 05, 09)};
DateTime firstdate = new DateTime(2016, 02, 01);
while (firstdate.DayOfWeek != DayOfWeek.Monday) firstdate = firstdate.AddDays(1);
DateTime lastdate = new DateTime(2016, 06, 01);
List<DateTime> showDates = new List<DateTime>();
while (lastdate != firstdate.AddDays(-1)) { //включительно
if ((firstdate.DayOfWeek == DayOfWeek.Monday || firstdate.DayOfWeek == DayOfWeek.Tuesday ||
firstdate.DayOfWeek == DayOfWeek.Wednesday || firstdate.DayOfWeek == DayOfWeek.Thursday) &&
!holidays.Contains(firstdate, new HolidayComparer())) showDates.Add(firstdate);
firstdate = firstdate.AddDays(1);
}
Console.WriteLine("Кол-во серий: " + showDates.Count + Environment.NewLine +
string.Join(Environment.NewLine, showDates.Select(x => x.ToShortDateString())));
Console.ReadKey();
}
class HolidayComparer : IEqualityComparer<DateTime>
{
public bool Equals(DateTime x, DateTime y)
{
return x.Month == y.Month && x.Day == y.Day;
}
public int GetHashCode(DateTime obj)
{
return obj.GetHashCode();
}
}
}
}