質問: 条件と重複した時間範囲を取得する 私はタスクのスケジューラーを作ろうとしていますが、何をするか、解決する方法がわからない問題に遭遇しました:S できるだけ説明するつもりです。 次のような表があります。 ``` key | start | end | employee(fk) 1 6:00 8:00 A 2 9:00 11:00 B 3 7:00 9:00 B 4 7:00 11:00 C ``` !in image 私が見つけたいのは、N人の従業員のセットが与えられた場合、与えられた従業員によってすべての重複した時間範囲を返すことです。それは与えられた従業員の "AND'ed"行を取得するようなものです。 (言い換えれば、与えられたすべての従業員が働いているすべての時間範囲を取得する) 例: ``` given {A,B} returns 2 columns 7:00 | 8:00 time range which overlaped by A and B given {B,C} returns 2 columns 9:00 | 11:00 time range which overlaped by B and C ``` 私は3日間考えていて、まだ何をすべきか分かりません...誰かが私を助けることができますか?
回答: あなたの細かさは十分に粗いので、30分のステップで行けば、すべての従業員が実際に忙しいかどうかを確認することができます。 すべての従業員に対して1つのブール値の配列を保持することができます。ブール値は、その従業員が現在の時間にビジーであるかどうかを示します。 次に30分のステップを踏みます(午前6時から仮定しましょう): 1. 6AMで活動を開始する人をチェックします。開始アクティビティごとに対応するフラグに設定されます。 2. すべてのフラグがtrueに設定されている場合は、ここでは範囲が重複しています。そうでない場合は、範囲が重複している場合は停止します。 3. 時間を30分増加させる 4. 従業員の行動を開始するたびに、フラグをtrueに設定します。 5. 従業員のすべての終了アクティビティに対して、フラグをfalseに設定します。 6. 手順2に戻る