1

Express でスケジューリング アプリケーションを構築しています。毎月のカレンダーを表示するカレンダー ビューがあります。

毎日を完全にカバーする必要があります。シフトが重複するかどうかに関係なく、シフトには常に少なくとも 1 人がいる必要があります。

次のような 1 日のシフトの配列があるとします。

{
    start: [javascript Date],
    end: [javascript Date],
    name: "James Bond",
    ...
}

それを埋めるためにさらにシフトが必要な場合は、その日を強調する CSS クラスを条件付きで追加したいと考えています。

xと の間の時間yが完全に満たされているかどうかを判断する最良の方法は何ですか?

4

1 に答える 1

2

何を試したかを示す必要がありますが、この問題に対する 2 つの基本的なアプローチの疑似コードを示します。

どちらのアプローチでも、シフトに半分開いた間隔を使用していることを確認してください。これは、いくつかの異なる方法で表されます。

// interval notation:
[start, end)

// algebraicly
start <= value < end

// javascript and other code
start <= value && end > value 

アプローチ #1

  • 各日付で使用Date.getTime()して、各日付の単純な数値表現を取得します。
  • Interval Treeを実装するライブラリを見つけます。
  • すべてのシフトをツリーにマッピングします。
  • ツリーをフラット化/マージします。
  • ギャップを探します。

アプローチ #2

  • カウンターを初期化しi = 0ます。
  • キーと値のペアの辞書またはリストを初期化します。
  • リスト内の各シフトについて:
    • 開始日xがシフト内にある場合は、 を増やしますi
    • 開始時間が辞書にあるかどうかを確認します。
      • そうでない場合は、キーを開始日時、値を にして追加します1
      • すでにディクショナリにある場合は、値を増やします。
    • 終了時刻が辞書にあるかどうかを確認します。
      • そうでない場合は、キーを開始日時、値を にして追加します-1
      • すでにディクショナリにある場合は、値を減らします。
  • 辞書を日時キーでソートします。
  • から辞書をたどりxます。
    • i現在働いている人数から始める必要があります。
    • 各ディクショナリ アイテムの値をカウンタに追加しますi
    • もしそうならi == 0、誰も働いていません。false またはエラーを返します。
    • ロジックに従っていれば、i負になることはありません。あればエラー。
    • 終了日になるまで続行しますy
于 2013-07-27T23:57:12.157 に答える