Я пытаюсь сгенерировать некоторые тестовые данные.Распределение назначений в диапазоне дат
Скажите, что у меня 1000 назначений, которые мне нужно выделить в диапазоне дат.
Теперь мне нужно распределить эти встречи так, чтобы в конце месяца было так много назначений в день, как есть в начале месяца. Увеличение числа назначений должно возрастать с постоянной скоростью.
Так, например, если в первый день месяца есть 5 назначений, к концу месяца мы будем получать 10 встреч в день.
Встреча может происходить только в будние дни.
Есть ли достойный алгоритм, который поможет мне распределить эти даты таким образом?
Редактировать
Это лучшее, что я получил до сих пор, вдохновленный решение Henriks:
private int GetNumForCurrentDate (DateTime date)
{
int daysInMonth = DateTime.DaysInMonth (date.Year, date.Month);
// x is the number of appointments on the first day
double firstDay = this._NumPerMonth/(((ratio + 1)/2) * daysInMonth);
// x * ratio is the number of appointments on the last day.
double lastDay = firstDay * ratio;
// Interpolate a value between the first and last days
double exactNumOnThisDay = firstDay + (lastDay - firstDay) * ((double)date.Day/(double)daysInMonth);
int numOnThisDay = Convert.ToInt32 (Math.Truncate (exactNumOnThisDay));
// Accumulate any overflow
this._Overflow += exactNumOnThisDay - numOnThisDay;
if (this._Overflow > 1)
{
// Shove the overflow into our number when it gets into whole number teritory
numOnThisDay++;
this._Overflow--;
}
return numOnThisDay;
}
возвращает количество дней выделить на определенный день с учетом даты. Речь идет о разделении распределений на каждый месяц и обрабатывает округление переполнения, но его не совсем идеально, у него заканчиваются дни, чтобы выделить в последний день, но на данный момент это достаточно хорошо, и у меня заканчивается время, чтобы его совершенствовать ..
«если есть 5 назначений в 1-й день месяца, то к концу месяца мы будем получать 10 назначений в месяц »--- Это в месяц или в день, поскольку вы заявляете это по-разному в разных местах вашего вопроса. Спасибо –
Извините .. вопиющая опечатка! Я имею в виду 10 в день. Редактировал. Спасибо за обнаружение;) –