using System.Collections.Generic;
public static void Main(string[] args)
public static void LetsGetItDone()
char[] array = "01234567".ToCharArray();
var list = GetPer(array);
int[] days31 = {1, 3, 5, 7, 8, 10, 12};
int[] days30 = { 4, 6, 9, 11};
DateTime lastDateOf2015 = new DateTime(2015, 12, 31);
DateTime illion = DateTime.Today;
SortedSet<DateTime> set = new SortedSet<DateTime>();
if (i % 10000 > 2000 && i % 10000 < 2999)
date = GetDayMonthYear(i);
if(date[0] <= 30 && (days30.Contains(date[1])))
counter = ProcessDate(ref illion, date, counter);
set.Add(new DateTime(illion.Ticks));
else if (date[0] <= 31 && days31.Contains(date[1]))
counter = ProcessDate(ref illion, date, counter);
set.Add(new DateTime(illion.Ticks));
else if(date[0] < 29 && date[1] == 2)
counter = ProcessDate(ref illion, date, counter);
set.Add(new DateTime(illion.Ticks));
else if(date[0] == 29 && date[1] == 2 && DateTime.IsLeapYear(date[2]))
counter = ProcessDate(ref illion, date, counter);
set.Add(new DateTime(illion.Ticks));
Console.WriteLine("Number of valid illion dates: {0}\nFirst Illion after 2015: {1}\n\nFirst 5 illions are: ", counter, set.ElementAt(0));
foreach(DateTime t in set)
public static int ProcessDate(ref DateTime illion, int[] date, int counter)
DateTime tempDate = new DateTime(date[2], date[1], date[0]);
if (illion == DateTime.Today)
else if (tempDate.Year > 2015)
static int[] GetDayMonthYear(int num)
date[1] = (num % 1000000) / 10000;
public static List<int> GetPer(char[] list)
List<int> permutationList = new List<int>();
return GetPer(list, 0, x, permutationList);
private static List<int> GetPer(char[] list, int k, int m, List<int> permutationList)
permutationList.Add(Convert.ToInt32(new string(list)));
for (int i = k; i <= m; i++)
Swap(ref list[k], ref list[i]);
GetPer(list, k + 1, m, permutationList);
Swap(ref list[k], ref list[i]);
private static void Swap(ref char a, ref char b)