Algorithmus für Stunden, die im Tag von Aufgaben belegt sind

8
%Vor%

Ich habe Aufgaben, die in einen Kalender eingefügt werden:

Lass mich nun einen Zusammenhang geben: Jeder Tag dauert hier 7,5 Stunden. Aber ich arbeite mit einer Variablen namens DayHours (die gerade 7,5 ist). (DayHours wird auch in Locked Time verwendet, die unten beschrieben werden).

Das Ziel dieses Kalenders ist es, 7,5 Stunden Arbeitstage für Mitarbeiter zu planen.

Was ich brauche, ist ein Algorithmus, der mir korrekt sagen kann, wie viele Stunden tatsächlich an einem Tag belegt sind.

Das scheint einfach, aber ist eigentlich ziemlich rekursiv.

Zuerst ein paar Notizen. Sie werden bemerken, Case Manager, um 14 Uhr, könnte in 2 Tagen von 7,5 Stunden mit 1 Stunde Rest erledigt werden. Es ist auf 3 Tage gestreckt, weil 1. Zeitplan, ist 5 Stunden lang, und 2. kann nicht gestartet werden, bis die Vorgängeraufgaben des Tages abgeschlossen sind.

Es gibt auch das Konzept der gesperrten Zeit. In lila ist die gesperrte Zeit. Dies ist ein 10-Stunden Block der Sperrzeit. Das heißt, am 12. kann ich nur (7.5 - 7.5) Arbeitsstunden machen, und Montag, nur (7.5 - 2.5) auch.

Ich habe bereits eine Funktion, um die verfügbaren Stunden eines aktuellen Tages zu berechnen, um dies zu berücksichtigen:

%Vor%

Es gibt auch das Konzept der Carry-Stunden.

Hier ist ein Beispiel:

Nehmen wir nun Donnerstag den 18. (Der 18. hat 1. Fall):

Um die Anzahl der Stunden zu ermitteln, die dieser Tag für diesen Mitarbeiter hat, müssen wir uns zuerst die Aufgaben ansehen, die an diesem Tag beginnen, enden oder enden.

Ich weiß nicht, wie viele Stunden ich am 18. machen kann, weil die Aufgabe, die an diesem Tag endete, vielleicht Stunden gehabt hat. Also schaue ich den Starttag des Komponententests an. Ich kann das nicht herausfinden, entweder weil NWDM an diesem Tag fertig ist und vielleicht Stunden hat.

Also jetzt gehe ich NWDM bewerten. Ahh, dieser hat an diesem Tag nichts zu Ende, daher weiß ich, dass Schedule 5 / 7,5 Stunden zur Verfügung steht.

Also mache ich weiter und füge jeden Tag 7,5 Stunden hinzu.

Dann komme ich zum letzten Tag von NWDM. Bis dahin habe ich 5 + 7,5 + 7,5 + 7,5 Stunden daran gearbeitet,

Also habe ich 27,5 Stunden eingeplant, also werde ich am 22. Platz (30 - 27,5 = 2,5 Stunden) einlegen, um es zu beenden. So habe ich noch 5 Stunden Zeit, um an Unit Tests zu arbeiten.

Dies bedeutet, dass ich 1.5h brauche, um es zu beenden. Jetzt ist Case 1 Stunde lang.

Wäre Fall 7,5 - 1,5 oder mehr gewesen, sagen wir, dass der Tag voll ist und DayHours zurückkehrt.

Deshalb sind wir fertig. Der Rückgabewert ist 1,5 + 1 = 2,5.

Die Funktion sollte ein bisschen wie diese aussehen:

%Vor%

Um die Ereignisse zu erhalten, die an einem bestimmten Tag beginnen, enden oder fallen, verwende ich:

%Vor%

Der Zeitplan hat die folgenden relevanten Felder:

%Vor%

Der Zeitplan sieht ungefähr so ​​aus:

%Vor%

Könnte mir jemand bei der Entwicklung eines Algorithmus helfen, der das kann?

    
jmasterx 17.04.2013, 14:10
quelle

3 Antworten

1

Obwohl Ihre Frage sehr komplex und nicht sehr klar erklärt ist, werde ich versuchen, sie zu beantworten. Oder präzisieren Sie, wie Sie es zerlegen und lösen sollten (oder wie ich es lösen würde).

  

Was ich brauche, ist ein Algorithmus, der mir korrekt sagen kann, wie viele Stunden tatsächlich an einem Tag belegt sind.

Zuerst sehe ich das wirkliche Problem nicht, wenn Sie DateTo -Wert für Schedule haben. Es sei denn es entspricht DateFrom + Hours . In diesem Fall wird nicht der reale DateTo -Wert, sondern ein irrelevanter Wert angezeigt.

Ich nehme an, dass Schedule durch die Startzeit DateFrom und die Dauer Hours definiert ist. DateTo ist ein berechneter Wert und effizientes Rechnen ist der eigentliche Kern des Problems.

Also denke ich, dass diese Funktion, die Stunden in jedem Zeitbereich verfügbar macht, ziemlich einfach ist. Im Pseudocode sprechen:

%Vor%

Sie benötigen möglicherweise einige Anpassungen, da DateTime normale 24-Stunden-Tage erwartet.

    
mancze 23.02.2014, 12:51
quelle
0
___ answer21968445 ___

Obwohl Ihre Frage sehr komplex und nicht sehr klar erklärt ist, werde ich versuchen, sie zu beantworten. Oder präzisieren Sie, wie Sie es zerlegen und lösen sollten (oder wie ich es lösen würde).

  

Was ich brauche, ist ein Algorithmus, der mir korrekt sagen kann, wie viele Stunden tatsächlich an einem Tag belegt sind.

Zuerst sehe ich das wirkliche Problem nicht, wenn Sie %code% -Wert für %code% haben. Es sei denn es entspricht %code% + %code% . In diesem Fall wird nicht der reale %code% -Wert, sondern ein irrelevanter Wert angezeigt.

Ich nehme an, dass %code% durch die Startzeit %code% und die Dauer %code% definiert ist. %code% ist ein berechneter Wert und effizientes Rechnen ist der eigentliche Kern des Problems.

Also denke ich, dass diese Funktion, die Stunden in jedem Zeitbereich verfügbar macht, ziemlich einfach ist. Im Pseudocode sprechen:

%Vor%

Sie benötigen möglicherweise einige Anpassungen, da %code% normale 24-Stunden-Tage erwartet.

    
___ tag123c ___ C # (sprich "Cis") ist eine objektorientierte Programmiersprache auf hohem Niveau, die für die Erstellung einer Vielzahl von Anwendungen entwickelt wurde, die auf dem .NET Framework (oder .NET Core) ausgeführt werden. C # ist einfach, leistungsfähig, typsicher und objektorientiert. ___ tag123aspnet ___ ASP.NET ist ein Framework für die Entwicklung von Microsoft-Webanwendungen, mit dem Programmierer dynamische Websites, Webanwendungen und Webdienste erstellen können. Es ist nützlich, dieses Tag in Verbindung mit dem Typ des Projekttyps zu verwenden, z. [asp.net-mvc], [asp.net-webforms] oder [asp.net-web-api]. Verwenden Sie dieses Tag NICHT für Fragen zu ASP.NET Core - verwenden Sie stattdessen [asp.net-core]. ___ qstnhdr ___ Algorithmus für Stunden, die im Tag von Aufgaben belegt sind ___ qstntxt ___
%Vor%

Ich habe Aufgaben, die in einen Kalender eingefügt werden:

Lass mich nun einen Zusammenhang geben: Jeder Tag dauert hier 7,5 Stunden. Aber ich arbeite mit einer Variablen namens DayHours (die gerade 7,5 ist). (DayHours wird auch in Locked Time verwendet, die unten beschrieben werden).

Das Ziel dieses Kalenders ist es, 7,5 Stunden Arbeitstage für Mitarbeiter zu planen.

Was ich brauche, ist ein Algorithmus, der mir korrekt sagen kann, wie viele Stunden tatsächlich an einem Tag belegt sind.

Das scheint einfach, aber ist eigentlich ziemlich rekursiv.

Zuerst ein paar Notizen. Sie werden bemerken, Case Manager, um 14 Uhr, könnte in 2 Tagen von 7,5 Stunden mit 1 Stunde Rest erledigt werden. Es ist auf 3 Tage gestreckt, weil 1. Zeitplan, ist 5 Stunden lang, und 2. kann nicht gestartet werden, bis die Vorgängeraufgaben des Tages abgeschlossen sind.

Es gibt auch das Konzept der gesperrten Zeit. In lila ist die gesperrte Zeit. Dies ist ein 10-Stunden Block der Sperrzeit. Das heißt, am 12. kann ich nur (7.5 - 7.5) Arbeitsstunden machen, und Montag, nur (7.5 - 2.5) auch.

Ich habe bereits eine Funktion, um die verfügbaren Stunden eines aktuellen Tages zu berechnen, um dies zu berücksichtigen:

%Vor%

Es gibt auch das Konzept der Carry-Stunden.

Hier ist ein Beispiel:

Nehmen wir nun Donnerstag den 18. (Der 18. hat 1. Fall):

Um die Anzahl der Stunden zu ermitteln, die dieser Tag für diesen Mitarbeiter hat, müssen wir uns zuerst die Aufgaben ansehen, die an diesem Tag beginnen, enden oder enden.

Ich weiß nicht, wie viele Stunden ich am 18. machen kann, weil die Aufgabe, die an diesem Tag endete, vielleicht Stunden gehabt hat. Also schaue ich den Starttag des Komponententests an. Ich kann das nicht herausfinden, entweder weil NWDM an diesem Tag fertig ist und vielleicht Stunden hat.

Also jetzt gehe ich NWDM bewerten. Ahh, dieser hat an diesem Tag nichts zu Ende, daher weiß ich, dass Schedule 5 / 7,5 Stunden zur Verfügung steht.

Also mache ich weiter und füge jeden Tag 7,5 Stunden hinzu.

Dann komme ich zum letzten Tag von NWDM. Bis dahin habe ich 5 + 7,5 + 7,5 + 7,5 Stunden daran gearbeitet,

Also habe ich 27,5 Stunden eingeplant, also werde ich am 22. Platz (30 - 27,5 = 2,5 Stunden) einlegen, um es zu beenden. So habe ich noch 5 Stunden Zeit, um an Unit Tests zu arbeiten.

Dies bedeutet, dass ich 1.5h brauche, um es zu beenden. Jetzt ist Case 1 Stunde lang.

Wäre Fall 7,5 - 1,5 oder mehr gewesen, sagen wir, dass der Tag voll ist und DayHours zurückkehrt.

Deshalb sind wir fertig. Der Rückgabewert ist 1,5 + 1 = 2,5.

Die Funktion sollte ein bisschen wie diese aussehen:

%Vor%

Um die Ereignisse zu erhalten, die an einem bestimmten Tag beginnen, enden oder fallen, verwende ich:

%Vor%

Der Zeitplan hat die folgenden relevanten Felder:

%Vor%

Der Zeitplan sieht ungefähr so ​​aus:

%Vor%

Könnte mir jemand bei der Entwicklung eines Algorithmus helfen, der das kann?

    
___ tag123algorithm ___ Ein Algorithmus ist eine Folge wohldefinierter Schritte, die eine abstrakte Lösung für ein Problem definieren. Verwenden Sie dieses Tag, wenn sich Ihr Problem auf den Algorithmusentwurf bezieht. ___ answer27607449 ___

Dies beantwortet nicht die genaue Frage, aber ich würde vorschlagen, Ihre Logik zu vereinfachen, indem Sie Ihre Klassen (Objekte) mit einigen Hilfsmethoden erweitern, z. Methoden / Eigenschaften, die Listen von besetzten Tagen zurückgeben. Wenn Sie nicht auf diese Klassen zugreifen können (d. H. Sie stammen nicht aus Ihrer Codebasis), erstellen Sie neue Klassen und ordnen Sie diesen Klassen zu. Auch - die .NET DateTime-Klasse hat einige sehr nützliche Eigenschaften und Enums wie "DayOfWeek" und "TimeOfDay", die für Sie nützlich sein könnten.

    
___ answer16100721 ​​___

Wie so:

  1. Erstellen Sie eine Liste von Tagen mit Freizeit.
  2. Fügen Sie für jedes Element in der Liste die maximale Zeit hinzu, die für Ihre Aufgabe verfügbar ist.
  3. Wenn die für Ihr Projekt benötigte Zeit 0 erreicht, fügen Sie keine Blöcke mehr hinzu.
___
Captain Kenpachi 19.04.2013 08:48
quelle
0

Dies beantwortet nicht die genaue Frage, aber ich würde vorschlagen, Ihre Logik zu vereinfachen, indem Sie Ihre Klassen (Objekte) mit einigen Hilfsmethoden erweitern, z. Methoden / Eigenschaften, die Listen von besetzten Tagen zurückgeben. Wenn Sie nicht auf diese Klassen zugreifen können (d. H. Sie stammen nicht aus Ihrer Codebasis), erstellen Sie neue Klassen und ordnen Sie diesen Klassen zu. Auch - die .NET DateTime-Klasse hat einige sehr nützliche Eigenschaften und Enums wie "DayOfWeek" und "TimeOfDay", die für Sie nützlich sein könnten.

    
user369142 22.12.2014 17:22
quelle

Tags und Links