具有重叠值的列表排列
Permutation of lists with overlapping values
我哥哥是学医的,他带着问题来找我。他和他的3个同学必须在两家医院之间轮换,比如说H1
和H2
。
H1
有一个早班和一个夜班。早班是要求最高的班,所以必须有两个人在场。夜班可以一个人坐,这个人第二天休息。
H2
只有早班,一个人就可以完成
问题:
我试图通过将其视为以下事件的排列来解决此问题:
- H1 早班 (
H1_M
)
- H1 夜班 (
H1_N
)
- H2 偏移 (
H2
)
- 休息日 (
R
)
这些活动有以下限制:
- 没有24小时轮班,所以
H1_N
不能跟H1_M
- 休息日总是在夜班之后,所以
R
总是在 H1_N
之后
- 1个同学总是休息日除了第一天,否则无解
问题是如何创建4个时间表,每个学生一个,满足上述两个要求。
尝试的解决方案:
我已经创建了遵循上述规则的事件序列,
import itertools
# Possible sequences from the 4 events
seq1 = ['H1_M', 'H1', 'H1_N', 'R']
seq2 = ['H1_N', 'R', 'H1_M', 'H2']
seq3 = ['H1_N', 'R', 'H2', 'H1_M']
seq4 = ['H2', 'H1_N', 'R', 'H1_M']
# All possible iterations
it = list(itertools.permutations([seq1, seq2, seq3, seq4]))
这个问题是我不知道如何生成 4 个列表,其中 2 个列表在每天早班 H1_M
期间重叠。如果有人能给我指点一下,我和我的兄弟将不胜感激,谢谢
让我们点名p1,p2、p3 和 p4.
我要给班次编号s1,s2 , s3, s4, s5, ...
班次编号按时间顺序排列。
偶数班是夜班。
奇数班是白班。
+----+-------+
| s1 | DAY |
+----+-------+
| s2 | NIGHT |
+----+-------+
| s3 | DAY |
+----+-------+
| s4 | NIGHT |
+----+-------+
| s5 | DAY |
+----+-------+
| s6 | NIGHT |
+----+-------+
听起来像:
- 每个夜班,我们需要 1 名医学生
- 每个白班必须有 3 名医学生。
- 人们不能连续轮班工作。从数学上讲,这意味着对于任何整数
a
和任何整数 b
如果有必要 p(a)
轮班 s(b)
则有必要 p(a)
不工作班次 s(b+1)
(即人 p(a)
不可能工作班次 s(b+1)
)。
一开始,我们不关心每个人在哪家医院工作。在我们弄清楚每个轮班的工作人员之后,我们就可以决定将每个人送到哪家医院。
有人要上第一个夜班。谁不重要。任意选择人p1
。
+-------+-------+--------+
| SHIFT | DAY | PEOPLE |
| | OR | |
| | NIGHT | |
+-------+-------+--------+
| s1 | DAY | ??? |
+-------+-------+--------+
| s2 | NIGHT | p1 |
+-------+-------+--------+
| s3 | DAY | |
+-------+-------+--------+
| s4 | NIGHT | |
+-------+-------+--------+
| s5 | DAY | |
+-------+-------+--------+
| s6 | NIGHT | |
+-------+-------+--------+
据推测,您不希望医学生连续轮班工作。所以,p1
一定不能工作shift s1
.
白班需要 3 个人 s1
。白班只有3人可以选s1
+-------+-------+------------+
| SHIFT | DAY | PEOPLE |
| | OR | |
| | NIGHT | |
+-------+-------+------------+
| s1 | DAY | p2, p3, p4 |
+-------+-------+------------+
| s2 | NIGHT | p1 |
+-------+-------+------------+
| s3 | DAY | |
+-------+-------+------------+
| s4 | NIGHT | |
+-------+-------+------------+
| s5 | DAY | |
+-------+-------+------------+
| s6 | NIGHT | |
+-------+-------+------------+
规则是如果 p1 轮班 s2,那么 p1 将无法工作 shift s3
+-------+-------+------------+
| SHIFT | DAY | PEOPLE |
| | OR | |
| | NIGHT | |
+-------+-------+------------+
| s1 | DAY | p2, p3, p4 |
+-------+-------+------------+
| s2 | NIGHT | p1 |
+-------+-------+------------+
| s3 | DAY | not(p1) |
+-------+-------+------------+
| s4 | NIGHT | |
+-------+-------+------------+
这是个问题。如果p1不能轮班s3
,那我们只有一个选择:
+-------+-------+----------+------------+
| SHIFT | DAY | QUANTITY | PEOPLE |
| | OR | OF | |
| | NIGHT | PEOPLE | |
+-------+-------+----------+------------+
| s1 | DAY | 3 | p2, p3, p4 |
+-------+-------+----------+------------+
| s2 | NIGHT | 1 | p1 |
+-------+-------+----------+------------+
| s3 | DAY | 3 | p2, p3, p4 |
+-------+-------+----------+------------+
| s4 | NIGHT | 1 | p1 |
+-------+-------+----------+------------+
我认为医学生应该改变他们工作的医院。人 p1 不应该每晚都在医院 #1 值夜班。
他们必须多久关机一次?
假设每个医学生写下他们在每家医院工作了多少班次。是否只有在所有其他医院完成至少一个班次后,他们才能在一家医院进行第二班?
如果不能让医学生一直呆在同一家医院,那么拉两班是不可避免的。
我制定了一个看起来不错的时间表。
任何时候你连续两个班次,你得到接下来的连续两个班次休息恢复。
+-------+-------+----------+--------+--------+--------+--------+
| SHIFT | DAY | QUANTITY | p1 | p2 | p3 | p4 |
| | OR | OF | | | | |
| | NIGHT | PEOPLE | | | | |
+-------+-------+----------+--------+--------+--------+--------+
| s1 | DAY | 3 | work | | | snooze |
+-------+-------+----------+--------+--------+--------+--------+
| s2 | NIGHT | 1 | work | | | snooze |
+-------+-------+----------+--------+--------+--------+--------+
| s3 | DAY | 3 | snooze | work | | |
+-------+-------+----------+--------+--------+--------+--------+
| s4 | NIGHT | 1 | snooze | work | | |
+-------+-------+----------+--------+--------+--------+--------+
| s5 | DAY | 3 | | snooze | work | |
+-------+-------+----------+--------+--------+--------+--------+
| s6 | NIGHT | 1 | | snooze | work | |
+-------+-------+----------+--------+--------+--------+--------+
| s7 | DAY | 3 | | | snooze | work |
+-------+-------+----------+--------+--------+--------+--------+
| S8 | NIGHT | 1 | | | snooze | work |
+-------+-------+----------+--------+--------+--------+--------+
table中的空白其实很容易填
双班不能在work
之后或进行,否则将是三班。
+--------------+------------------------------+
| single-shift | snooze-work-snooze |
+--------------+------------------------------+
| double-shift | snooze-work-work-snooze |
+--------------+------------------------------+
| triple-shift | snooze-work-work-work-snooze |
+--------------+------------------------------+
在 table 中看到 work-work
的任何地方,在它前面插入一个 snooze
,在它后面插入一个 snooze
。
下面是完全填充的table:
╔═══════╦═══════╦══════════╦════════╦════════╦════════╦════════╗
║ SHIFT ║ DAY ║ QUANTITY ║ p1 ║ p2 ║ p3 ║ p4 ║
║ ║ OR ║ OF ║ ║ ║ ║ ║
║ ║ NIGHT ║ PEOPLE ║ ║ ║ ║ ║
╠═══════╬═══════╬══════════╬════════╬════════╬════════╬════════╣
║ s1 ║ DAY ║ 3 ║ work ║ work ║ work ║ snooze ║
╠═══════╬═══════╬══════════╬════════╬════════╬════════╬════════╣
║ s2 ║ NIGHT ║ 1 ║ work ║ snooze ║ snooze ║ snooze ║
╠═══════╬═══════╬══════════╬════════╬════════╬════════╬════════╣
║ s3 ║ DAY ║ 3 ║ snooze ║ work ║ work ║ work ║
╠═══════╬═══════╬══════════╬════════╬════════╬════════╬════════╣
║ s4 ║ NIGHT ║ 1 ║ snooze ║ work ║ snooze ║ snooze ║
╠═══════╬═══════╬══════════╬════════╬════════╬════════╬════════╣
║ s5 ║ DAY ║ 3 ║ work ║ snooze ║ work ║ work ║
╠═══════╬═══════╬══════════╬════════╬════════╬════════╬════════╣
║ s6 ║ NIGHT ║ 1 ║ snooze ║ snooze ║ work ║ snooze ║
╠═══════╬═══════╬══════════╬════════╬════════╬════════╬════════╣
║ s7 ║ DAY ║ 3 ║ work ║ work ║ snooze ║ work ║
╠═══════╬═══════╬══════════╬════════╬════════╬════════╬════════╣
║ S8 ║ NIGHT ║ 1 ║ snooze ║ snooze ║ snooze ║ work ║
╚═══════╩═══════╩══════════╩════════╩════════╩════════╩════════╝
你可以轮换值夜班的人:
╔═══════╦═══════╦═════════╦══════╦══════╦══════╦══════╗
║ SHIFT ║ DAY ║ NUMBER ║ p1 ║ p2 ║ p3 ║ p4 ║
║ ║ OR ║ OF ║ ║ ║ ║ ║
║ ║ NIGHT ║ PEOPLE ║ ║ ║ ║ ║
║ ║ ║ WORKING ║ ║ ║ ║ ║
╠═══════╬═══════╬═════════╬══════╬══════╬══════╬══════╣
║ s1 ║ DAY ║ 3 ║ ║ ║ ║ ║
╠═══════╬═══════╬═════════╬══════╬══════╬══════╬══════╣
║ s2 ║ NIGHT ║ 1 ║ work ║ ║ ║ ║
╠═══════╬═══════╬═════════╬══════╬══════╬══════╬══════╣
║ s3 ║ DAY ║ 3 ║ ║ ║ ║ ║
╠═══════╬═══════╬═════════╬══════╬══════╬══════╬══════╣
║ s4 ║ NIGHT ║ 1 ║ ║ work ║ ║ ║
╠═══════╬═══════╬═════════╬══════╬══════╬══════╬══════╣
║ s5 ║ DAY ║ 3 ║ ║ ║ ║ ║
╠═══════╬═══════╬═════════╬══════╬══════╬══════╬══════╣
║ s6 ║ NIGHT ║ 1 ║ ║ ║ work ║ ║
╠═══════╬═══════╬═════════╬══════╬══════╬══════╬══════╣
║ s7 ║ DAY ║ 3 ║ ║ ║ ║ ║
╠═══════╬═══════╬═════════╬══════╬══════╬══════╬══════╣
║ S8 ║ NIGHT ║ 1 ║ ║ ║ ║ work ║
╠═══════╬═══════╬═════════╬══════╬══════╬══════╬══════╣
║ s9 ║ DAY ║ 3 ║ ║ ║ ║ ║
╠═══════╬═══════╬═════════╬══════╬══════╬══════╬══════╣
║ s10 ║ NIGHT ║ 1 ║ ║ ║ ║ ║
╚═══════╩═══════╩═════════╩══════╩══════╩══════╩══════╝
假设没有人必须在上夜班后立即上白班。然后,我们可以填写剩下的 table:
╔═══════╦═══════╦═════════╦════════╦════════╦════════╦════════╗
║ SHIFT ║ DAY ║ NUMBER ║ p1 ║ p2 ║ p3 ║ p4 ║
║ ║ OR ║ OF ║ ║ ║ ║ ║
║ ║ NIGHT ║ PEOPLE ║ ║ ║ ║ ║
║ ║ ║ WORKING ║ ║ ║ ║ ║
╠═══════╬═══════╬═════════╬════════╬════════╬════════╬════════╣
║ s1 ║ DAY ║ 3 ║ ║ ║ ║ ║
╠═══════╬═══════╬═════════╬════════╬════════╬════════╬════════╣
║ s2 ║ NIGHT ║ 1 ║ work ║ ║ ║ ║
╠═══════╬═══════╬═════════╬════════╬════════╬════════╬════════╣
║ s3 ║ DAY ║ 3 ║ snooze ║ ║ ║ ║
╠═══════╬═══════╬═════════╬════════╬════════╬════════╬════════╣
║ s4 ║ NIGHT ║ 1 ║ ║ work ║ ║ ║
╠═══════╬═══════╬═════════╬════════╬════════╬════════╬════════╣
║ s5 ║ DAY ║ 3 ║ ║ snooze ║ ║ ║
╠═══════╬═══════╬═════════╬════════╬════════╬════════╬════════╣
║ s6 ║ NIGHT ║ 1 ║ ║ ║ work ║ ║
╠═══════╬═══════╬═════════╬════════╬════════╬════════╬════════╣
║ s7 ║ DAY ║ 3 ║ ║ ║ snooze ║ ║
╠═══════╬═══════╬═════════╬════════╬════════╬════════╬════════╣
║ S8 ║ NIGHT ║ 1 ║ ║ ║ ║ work ║
╠═══════╬═══════╬═════════╬════════╬════════╬════════╬════════╣
║ s9 ║ DAY ║ 3 ║ ║ ║ ║ snooze ║
╚═══════╩═══════╩═════════╩════════╩════════╩════════╩════════╝
不幸的是,如果 1 或 4 个人在夜班后打瞌睡,那么白班需要 3 人,而且只有 3 人可用。当天上白班的选择不多
╔═══════╦═══════╦═════════╦════════╦════════╦════════╦════════╗
║ SHIFT ║ DAY ║ NUMBER ║ p1 ║ p2 ║ p3 ║ p4 ║
║ ║ OR ║ OF ║ ║ ║ ║ ║
║ ║ NIGHT ║ PEOPLE ║ ║ ║ ║ ║
║ ║ ║ WORKING ║ ║ ║ ║ ║
╠═══════╬═══════╬═════════╬════════╬════════╬════════╬════════╣
║ s1 ║ DAY ║ 3 ║ ║ ║ ║ ║
╠═══════╬═══════╬═════════╬════════╬════════╬════════╬════════╣
║ s2 ║ NIGHT ║ 1 ║ work ║ ║ ║ ║
╠═══════╬═══════╬═════════╬════════╬════════╬════════╬════════╣
║ s3 ║ DAY ║ 3 ║ snooze ║ work ║ work ║ work ║
╠═══════╬═══════╬═════════╬════════╬════════╬════════╬════════╣
║ s4 ║ NIGHT ║ 1 ║ ║ work ║ ║ ║
╠═══════╬═══════╬═════════╬════════╬════════╬════════╬════════╣
║ s5 ║ DAY ║ 3 ║ work ║ snooze ║ work ║ work ║
╠═══════╬═══════╬═════════╬════════╬════════╬════════╬════════╣
║ s6 ║ NIGHT ║ 1 ║ ║ ║ work ║ ║
╠═══════╬═══════╬═════════╬════════╬════════╬════════╬════════╣
║ s7 ║ DAY ║ 3 ║ work ║ work ║ snooze ║ work ║
╠═══════╬═══════╬═════════╬════════╬════════╬════════╬════════╣
║ S8 ║ NIGHT ║ 1 ║ ║ ║ ║ work ║
╠═══════╬═══════╬═════════╬════════╬════════╬════════╬════════╣
║ s9 ║ DAY ║ 3 ║ work ║ work ║ work ║ snooze ║
╚═══════╩═══════╩═════════╩════════╩════════╩════════╩════════╝
人满为患TABLE:
╔═══════╦═══════╦═════════╦════════╦════════╦════════╦════════╗
║ SHIFT ║ DAY ║ NUMBER ║ p1 ║ p2 ║ p3 ║ p4 ║
║ ║ OR ║ OF ║ ║ ║ ║ ║
║ ║ NIGHT ║ PEOPLE ║ ║ ║ ║ ║
║ ║ ║ WORKING ║ ║ ║ ║ ║
╠═══════╬═══════╬═════════╬════════╬════════╬════════╬════════╣
║ s1 ║ DAY ║ 3 ║ work ║ work ║ work ║ snooze ║
╠═══════╬═══════╬═════════╬════════╬════════╬════════╬════════╣
║ s2 ║ NIGHT ║ 1 ║ work ║ snooze ║ snooze ║ snooze ║
╠═══════╬═══════╬═════════╬════════╬════════╬════════╬════════╣
║ s3 ║ DAY ║ 3 ║ snooze ║ work ║ work ║ work ║
╠═══════╬═══════╬═════════╬════════╬════════╬════════╬════════╣
║ s4 ║ NIGHT ║ 1 ║ snooze ║ work ║ snooze ║ snooze ║
╠═══════╬═══════╬═════════╬════════╬════════╬════════╬════════╣
║ s5 ║ DAY ║ 3 ║ work ║ snooze ║ work ║ work ║
╠═══════╬═══════╬═════════╬════════╬════════╬════════╬════════╣
║ s6 ║ NIGHT ║ 1 ║ snooze ║ snooze ║ work ║ snooze ║
╠═══════╬═══════╬═════════╬════════╬════════╬════════╬════════╣
║ s7 ║ DAY ║ 3 ║ work ║ work ║ snooze ║ work ║
╠═══════╬═══════╬═════════╬════════╬════════╬════════╬════════╣
║ S8 ║ NIGHT ║ 1 ║ snooze ║ snooze ║ snooze ║ work ║
╠═══════╬═══════╬═════════╬════════╬════════╬════════╬════════╣
║ s9 ║ DAY ║ 3 ║ work ║ work ║ work ║ snooze ║
╠═══════╬═══════╬═════════╬════════╬════════╬════════╬════════╣
║ s10 ║ NIGHT ║ 1 ║ work ║ snooze ║ snooze ║ snooze ║
╚═══════╩═══════╩═════════╩════════╩════════╩════════╩════════╝
我哥哥是学医的,他带着问题来找我。他和他的3个同学必须在两家医院之间轮换,比如说H1
和H2
。
H1
有一个早班和一个夜班。早班是要求最高的班,所以必须有两个人在场。夜班可以一个人坐,这个人第二天休息。H2
只有早班,一个人就可以完成
问题:
我试图通过将其视为以下事件的排列来解决此问题:
- H1 早班 (
H1_M
) - H1 夜班 (
H1_N
) - H2 偏移 (
H2
) - 休息日 (
R
)
这些活动有以下限制:
- 没有24小时轮班,所以
H1_N
不能跟H1_M
- 休息日总是在夜班之后,所以
R
总是在H1_N
之后
- 1个同学总是休息日除了第一天,否则无解
问题是如何创建4个时间表,每个学生一个,满足上述两个要求。
尝试的解决方案:
我已经创建了遵循上述规则的事件序列,
import itertools
# Possible sequences from the 4 events
seq1 = ['H1_M', 'H1', 'H1_N', 'R']
seq2 = ['H1_N', 'R', 'H1_M', 'H2']
seq3 = ['H1_N', 'R', 'H2', 'H1_M']
seq4 = ['H2', 'H1_N', 'R', 'H1_M']
# All possible iterations
it = list(itertools.permutations([seq1, seq2, seq3, seq4]))
这个问题是我不知道如何生成 4 个列表,其中 2 个列表在每天早班 H1_M
期间重叠。如果有人能给我指点一下,我和我的兄弟将不胜感激,谢谢
让我们点名p1,p2、p3 和 p4.
我要给班次编号s1,s2 , s3, s4, s5, ...
班次编号按时间顺序排列。
偶数班是夜班。
奇数班是白班。
+----+-------+
| s1 | DAY |
+----+-------+
| s2 | NIGHT |
+----+-------+
| s3 | DAY |
+----+-------+
| s4 | NIGHT |
+----+-------+
| s5 | DAY |
+----+-------+
| s6 | NIGHT |
+----+-------+
听起来像:
- 每个夜班,我们需要 1 名医学生
- 每个白班必须有 3 名医学生。
- 人们不能连续轮班工作。从数学上讲,这意味着对于任何整数
a
和任何整数b
如果有必要p(a)
轮班s(b)
则有必要p(a)
不工作班次s(b+1)
(即人p(a)
不可能工作班次s(b+1)
)。
一开始,我们不关心每个人在哪家医院工作。在我们弄清楚每个轮班的工作人员之后,我们就可以决定将每个人送到哪家医院。
有人要上第一个夜班。谁不重要。任意选择人p1
。
+-------+-------+--------+
| SHIFT | DAY | PEOPLE |
| | OR | |
| | NIGHT | |
+-------+-------+--------+
| s1 | DAY | ??? |
+-------+-------+--------+
| s2 | NIGHT | p1 |
+-------+-------+--------+
| s3 | DAY | |
+-------+-------+--------+
| s4 | NIGHT | |
+-------+-------+--------+
| s5 | DAY | |
+-------+-------+--------+
| s6 | NIGHT | |
+-------+-------+--------+
据推测,您不希望医学生连续轮班工作。所以,p1
一定不能工作shift s1
.
白班需要 3 个人 s1
。白班只有3人可以选s1
+-------+-------+------------+
| SHIFT | DAY | PEOPLE |
| | OR | |
| | NIGHT | |
+-------+-------+------------+
| s1 | DAY | p2, p3, p4 |
+-------+-------+------------+
| s2 | NIGHT | p1 |
+-------+-------+------------+
| s3 | DAY | |
+-------+-------+------------+
| s4 | NIGHT | |
+-------+-------+------------+
| s5 | DAY | |
+-------+-------+------------+
| s6 | NIGHT | |
+-------+-------+------------+
规则是如果 p1 轮班 s2,那么 p1 将无法工作 shift s3
+-------+-------+------------+
| SHIFT | DAY | PEOPLE |
| | OR | |
| | NIGHT | |
+-------+-------+------------+
| s1 | DAY | p2, p3, p4 |
+-------+-------+------------+
| s2 | NIGHT | p1 |
+-------+-------+------------+
| s3 | DAY | not(p1) |
+-------+-------+------------+
| s4 | NIGHT | |
+-------+-------+------------+
这是个问题。如果p1不能轮班s3
,那我们只有一个选择:
+-------+-------+----------+------------+
| SHIFT | DAY | QUANTITY | PEOPLE |
| | OR | OF | |
| | NIGHT | PEOPLE | |
+-------+-------+----------+------------+
| s1 | DAY | 3 | p2, p3, p4 |
+-------+-------+----------+------------+
| s2 | NIGHT | 1 | p1 |
+-------+-------+----------+------------+
| s3 | DAY | 3 | p2, p3, p4 |
+-------+-------+----------+------------+
| s4 | NIGHT | 1 | p1 |
+-------+-------+----------+------------+
我认为医学生应该改变他们工作的医院。人 p1 不应该每晚都在医院 #1 值夜班。
他们必须多久关机一次?
假设每个医学生写下他们在每家医院工作了多少班次。是否只有在所有其他医院完成至少一个班次后,他们才能在一家医院进行第二班?
如果不能让医学生一直呆在同一家医院,那么拉两班是不可避免的。
我制定了一个看起来不错的时间表。
任何时候你连续两个班次,你得到接下来的连续两个班次休息恢复。
+-------+-------+----------+--------+--------+--------+--------+
| SHIFT | DAY | QUANTITY | p1 | p2 | p3 | p4 |
| | OR | OF | | | | |
| | NIGHT | PEOPLE | | | | |
+-------+-------+----------+--------+--------+--------+--------+
| s1 | DAY | 3 | work | | | snooze |
+-------+-------+----------+--------+--------+--------+--------+
| s2 | NIGHT | 1 | work | | | snooze |
+-------+-------+----------+--------+--------+--------+--------+
| s3 | DAY | 3 | snooze | work | | |
+-------+-------+----------+--------+--------+--------+--------+
| s4 | NIGHT | 1 | snooze | work | | |
+-------+-------+----------+--------+--------+--------+--------+
| s5 | DAY | 3 | | snooze | work | |
+-------+-------+----------+--------+--------+--------+--------+
| s6 | NIGHT | 1 | | snooze | work | |
+-------+-------+----------+--------+--------+--------+--------+
| s7 | DAY | 3 | | | snooze | work |
+-------+-------+----------+--------+--------+--------+--------+
| S8 | NIGHT | 1 | | | snooze | work |
+-------+-------+----------+--------+--------+--------+--------+
table中的空白其实很容易填
双班不能在work
之后或进行,否则将是三班。
+--------------+------------------------------+
| single-shift | snooze-work-snooze |
+--------------+------------------------------+
| double-shift | snooze-work-work-snooze |
+--------------+------------------------------+
| triple-shift | snooze-work-work-work-snooze |
+--------------+------------------------------+
在 table 中看到 work-work
的任何地方,在它前面插入一个 snooze
,在它后面插入一个 snooze
。
下面是完全填充的table:
╔═══════╦═══════╦══════════╦════════╦════════╦════════╦════════╗
║ SHIFT ║ DAY ║ QUANTITY ║ p1 ║ p2 ║ p3 ║ p4 ║
║ ║ OR ║ OF ║ ║ ║ ║ ║
║ ║ NIGHT ║ PEOPLE ║ ║ ║ ║ ║
╠═══════╬═══════╬══════════╬════════╬════════╬════════╬════════╣
║ s1 ║ DAY ║ 3 ║ work ║ work ║ work ║ snooze ║
╠═══════╬═══════╬══════════╬════════╬════════╬════════╬════════╣
║ s2 ║ NIGHT ║ 1 ║ work ║ snooze ║ snooze ║ snooze ║
╠═══════╬═══════╬══════════╬════════╬════════╬════════╬════════╣
║ s3 ║ DAY ║ 3 ║ snooze ║ work ║ work ║ work ║
╠═══════╬═══════╬══════════╬════════╬════════╬════════╬════════╣
║ s4 ║ NIGHT ║ 1 ║ snooze ║ work ║ snooze ║ snooze ║
╠═══════╬═══════╬══════════╬════════╬════════╬════════╬════════╣
║ s5 ║ DAY ║ 3 ║ work ║ snooze ║ work ║ work ║
╠═══════╬═══════╬══════════╬════════╬════════╬════════╬════════╣
║ s6 ║ NIGHT ║ 1 ║ snooze ║ snooze ║ work ║ snooze ║
╠═══════╬═══════╬══════════╬════════╬════════╬════════╬════════╣
║ s7 ║ DAY ║ 3 ║ work ║ work ║ snooze ║ work ║
╠═══════╬═══════╬══════════╬════════╬════════╬════════╬════════╣
║ S8 ║ NIGHT ║ 1 ║ snooze ║ snooze ║ snooze ║ work ║
╚═══════╩═══════╩══════════╩════════╩════════╩════════╩════════╝
你可以轮换值夜班的人:
╔═══════╦═══════╦═════════╦══════╦══════╦══════╦══════╗
║ SHIFT ║ DAY ║ NUMBER ║ p1 ║ p2 ║ p3 ║ p4 ║
║ ║ OR ║ OF ║ ║ ║ ║ ║
║ ║ NIGHT ║ PEOPLE ║ ║ ║ ║ ║
║ ║ ║ WORKING ║ ║ ║ ║ ║
╠═══════╬═══════╬═════════╬══════╬══════╬══════╬══════╣
║ s1 ║ DAY ║ 3 ║ ║ ║ ║ ║
╠═══════╬═══════╬═════════╬══════╬══════╬══════╬══════╣
║ s2 ║ NIGHT ║ 1 ║ work ║ ║ ║ ║
╠═══════╬═══════╬═════════╬══════╬══════╬══════╬══════╣
║ s3 ║ DAY ║ 3 ║ ║ ║ ║ ║
╠═══════╬═══════╬═════════╬══════╬══════╬══════╬══════╣
║ s4 ║ NIGHT ║ 1 ║ ║ work ║ ║ ║
╠═══════╬═══════╬═════════╬══════╬══════╬══════╬══════╣
║ s5 ║ DAY ║ 3 ║ ║ ║ ║ ║
╠═══════╬═══════╬═════════╬══════╬══════╬══════╬══════╣
║ s6 ║ NIGHT ║ 1 ║ ║ ║ work ║ ║
╠═══════╬═══════╬═════════╬══════╬══════╬══════╬══════╣
║ s7 ║ DAY ║ 3 ║ ║ ║ ║ ║
╠═══════╬═══════╬═════════╬══════╬══════╬══════╬══════╣
║ S8 ║ NIGHT ║ 1 ║ ║ ║ ║ work ║
╠═══════╬═══════╬═════════╬══════╬══════╬══════╬══════╣
║ s9 ║ DAY ║ 3 ║ ║ ║ ║ ║
╠═══════╬═══════╬═════════╬══════╬══════╬══════╬══════╣
║ s10 ║ NIGHT ║ 1 ║ ║ ║ ║ ║
╚═══════╩═══════╩═════════╩══════╩══════╩══════╩══════╝
假设没有人必须在上夜班后立即上白班。然后,我们可以填写剩下的 table:
╔═══════╦═══════╦═════════╦════════╦════════╦════════╦════════╗
║ SHIFT ║ DAY ║ NUMBER ║ p1 ║ p2 ║ p3 ║ p4 ║
║ ║ OR ║ OF ║ ║ ║ ║ ║
║ ║ NIGHT ║ PEOPLE ║ ║ ║ ║ ║
║ ║ ║ WORKING ║ ║ ║ ║ ║
╠═══════╬═══════╬═════════╬════════╬════════╬════════╬════════╣
║ s1 ║ DAY ║ 3 ║ ║ ║ ║ ║
╠═══════╬═══════╬═════════╬════════╬════════╬════════╬════════╣
║ s2 ║ NIGHT ║ 1 ║ work ║ ║ ║ ║
╠═══════╬═══════╬═════════╬════════╬════════╬════════╬════════╣
║ s3 ║ DAY ║ 3 ║ snooze ║ ║ ║ ║
╠═══════╬═══════╬═════════╬════════╬════════╬════════╬════════╣
║ s4 ║ NIGHT ║ 1 ║ ║ work ║ ║ ║
╠═══════╬═══════╬═════════╬════════╬════════╬════════╬════════╣
║ s5 ║ DAY ║ 3 ║ ║ snooze ║ ║ ║
╠═══════╬═══════╬═════════╬════════╬════════╬════════╬════════╣
║ s6 ║ NIGHT ║ 1 ║ ║ ║ work ║ ║
╠═══════╬═══════╬═════════╬════════╬════════╬════════╬════════╣
║ s7 ║ DAY ║ 3 ║ ║ ║ snooze ║ ║
╠═══════╬═══════╬═════════╬════════╬════════╬════════╬════════╣
║ S8 ║ NIGHT ║ 1 ║ ║ ║ ║ work ║
╠═══════╬═══════╬═════════╬════════╬════════╬════════╬════════╣
║ s9 ║ DAY ║ 3 ║ ║ ║ ║ snooze ║
╚═══════╩═══════╩═════════╩════════╩════════╩════════╩════════╝
不幸的是,如果 1 或 4 个人在夜班后打瞌睡,那么白班需要 3 人,而且只有 3 人可用。当天上白班的选择不多
╔═══════╦═══════╦═════════╦════════╦════════╦════════╦════════╗
║ SHIFT ║ DAY ║ NUMBER ║ p1 ║ p2 ║ p3 ║ p4 ║
║ ║ OR ║ OF ║ ║ ║ ║ ║
║ ║ NIGHT ║ PEOPLE ║ ║ ║ ║ ║
║ ║ ║ WORKING ║ ║ ║ ║ ║
╠═══════╬═══════╬═════════╬════════╬════════╬════════╬════════╣
║ s1 ║ DAY ║ 3 ║ ║ ║ ║ ║
╠═══════╬═══════╬═════════╬════════╬════════╬════════╬════════╣
║ s2 ║ NIGHT ║ 1 ║ work ║ ║ ║ ║
╠═══════╬═══════╬═════════╬════════╬════════╬════════╬════════╣
║ s3 ║ DAY ║ 3 ║ snooze ║ work ║ work ║ work ║
╠═══════╬═══════╬═════════╬════════╬════════╬════════╬════════╣
║ s4 ║ NIGHT ║ 1 ║ ║ work ║ ║ ║
╠═══════╬═══════╬═════════╬════════╬════════╬════════╬════════╣
║ s5 ║ DAY ║ 3 ║ work ║ snooze ║ work ║ work ║
╠═══════╬═══════╬═════════╬════════╬════════╬════════╬════════╣
║ s6 ║ NIGHT ║ 1 ║ ║ ║ work ║ ║
╠═══════╬═══════╬═════════╬════════╬════════╬════════╬════════╣
║ s7 ║ DAY ║ 3 ║ work ║ work ║ snooze ║ work ║
╠═══════╬═══════╬═════════╬════════╬════════╬════════╬════════╣
║ S8 ║ NIGHT ║ 1 ║ ║ ║ ║ work ║
╠═══════╬═══════╬═════════╬════════╬════════╬════════╬════════╣
║ s9 ║ DAY ║ 3 ║ work ║ work ║ work ║ snooze ║
╚═══════╩═══════╩═════════╩════════╩════════╩════════╩════════╝
人满为患TABLE:
╔═══════╦═══════╦═════════╦════════╦════════╦════════╦════════╗
║ SHIFT ║ DAY ║ NUMBER ║ p1 ║ p2 ║ p3 ║ p4 ║
║ ║ OR ║ OF ║ ║ ║ ║ ║
║ ║ NIGHT ║ PEOPLE ║ ║ ║ ║ ║
║ ║ ║ WORKING ║ ║ ║ ║ ║
╠═══════╬═══════╬═════════╬════════╬════════╬════════╬════════╣
║ s1 ║ DAY ║ 3 ║ work ║ work ║ work ║ snooze ║
╠═══════╬═══════╬═════════╬════════╬════════╬════════╬════════╣
║ s2 ║ NIGHT ║ 1 ║ work ║ snooze ║ snooze ║ snooze ║
╠═══════╬═══════╬═════════╬════════╬════════╬════════╬════════╣
║ s3 ║ DAY ║ 3 ║ snooze ║ work ║ work ║ work ║
╠═══════╬═══════╬═════════╬════════╬════════╬════════╬════════╣
║ s4 ║ NIGHT ║ 1 ║ snooze ║ work ║ snooze ║ snooze ║
╠═══════╬═══════╬═════════╬════════╬════════╬════════╬════════╣
║ s5 ║ DAY ║ 3 ║ work ║ snooze ║ work ║ work ║
╠═══════╬═══════╬═════════╬════════╬════════╬════════╬════════╣
║ s6 ║ NIGHT ║ 1 ║ snooze ║ snooze ║ work ║ snooze ║
╠═══════╬═══════╬═════════╬════════╬════════╬════════╬════════╣
║ s7 ║ DAY ║ 3 ║ work ║ work ║ snooze ║ work ║
╠═══════╬═══════╬═════════╬════════╬════════╬════════╬════════╣
║ S8 ║ NIGHT ║ 1 ║ snooze ║ snooze ║ snooze ║ work ║
╠═══════╬═══════╬═════════╬════════╬════════╬════════╬════════╣
║ s9 ║ DAY ║ 3 ║ work ║ work ║ work ║ snooze ║
╠═══════╬═══════╬═════════╬════════╬════════╬════════╬════════╣
║ s10 ║ NIGHT ║ 1 ║ work ║ snooze ║ snooze ║ snooze ║
╚═══════╩═══════╩═════════╩════════╩════════╩════════╩════════╝