Question

Je suis en train de générer des données de test.

Dire que j'ai 1000 rendez-vous que je dois allouer sur une plage de dates.

Maintenant, je dois distribuer ces nominations telles qu'il ya deux fois plus de rendez-vous par jour à la fin du mois car il y a au début du mois. L'augmentation des nominations doit augmenter avec une vitesse constante.

Ainsi, par exemple, s'il y a 5 rendez-vous le 1er jour du mois, à la fin du mois, nous allons recevoir 10 rendez-vous par jour.

Un rendez-vous ne peut se produire un jour de semaine.

Y at-il un algorithme décent qui me permettrait de distribuer ces dates de cette façon?

Modifier

Ceci 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 traite de séparer les montants alloués à chaque mois et gère trop-plein d'arrondi, mais son pas tout à fait parfait, il court de jours d'affecter le dernier jour, mais il est assez bon pour l'instant et Ive manquer de temps pour perfectionner. .

Était-ce utile?

La solution

x rendez-vous sur le premier jour, 2x le dernier jour, donc 1,5x en moyenne. Lorsqu'il y a des jours de la semaine y, x est égal à 1000 / (1.5y). Ainsi, 667 / y le premier jour, 1333 / y le dernier, interpoler les jours entre

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top