J'essaie de générer des données de test. Dites que j'ai 1000 rendez-vous que j'ai besoin d'allouer sur une plage de dates.Distribution des rendez-vous sur une plage de dates
Maintenant, je dois distribuer ces rendez-vous de manière à ce qu'il y ait deux fois plus de rendez-vous par jour à la fin du mois qu'en début de mois. L'augmentation des rendez-vous doit augmenter avec une vitesse constante. Par exemple, s'il y a 5 rendez-vous le 1er jour du mois, à la fin du mois nous aurons 10 rendez-vous par jour.
Un rendez-vous ne peut avoir lieu qu'un jour de la semaine.
Y at-il un algorithme décent qui m'aiderait à distribuer ces dates de cette façon?
Modifier
C'est le meilleur que je suis à ce jour, inspiré par la solution 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;
}
Il retourne le nombre de jours d'allouer un jour particulier donné la date. Il s'agit de séparer les allocations à chaque mois et gère le dépassement d'arrondi, mais ce n'est pas tout à fait parfait, il n'a plus de jours à allouer le dernier jour, mais c'est assez bon pour le moment ..
"s'il y a 5 rendez-vous le 1er jour du mois, d'ici la fin du mois nous aurons 10 rendez-vous par mois "--- Est-ce par mois ou par jour, comme vous le dites différemment à différents endroits dans votre question. Merci –
Désolé .. faute de frappe! Je veux dire 10 par jour. Avoir édité. Merci pour le repérage;) –