编辑:请参阅以编程方式解决“谁拥有斑马”?对于类似的问题
LSAT 中有一类逻辑问题是这样的:
广播的七个连续时间段(按时间顺序 I 到 7 编号)将被六首歌曲磁带(G、H、L、O、P、S)和恰好一个新闻磁带填满。每个磁带被分配到不同的时隙,并且没有磁带比任何其他磁带长。广播受以下限制:
L 必须在 O 之前立即播放。
新闻磁带必须在 L 之后的某个时间播放
。G 和 P 之间必须恰好有两个时隙,无论 G 是否在 P 之前或是否G 在 P 之后。
我有兴趣生成一个满足条件的排列列表作为学习测试和编程挑战的一种方式。但是,我不确定这是哪一类排列问题。我将类型问题概括如下:
给定一个长度为 n 的数组 A:
- 在 A 中,一组 n 个独特的项目有多少种排列方式?例如。有多少种方法可以重新排列 ABCDEFG?
- 如果唯一项目集合的长度小于 A 的长度,如果集合中的项目可能出现不止一次,那么集合在 A 中的排列方式有多少?例如。ABCDEF => AABCDEF; ABBCDEF 等
- 如果集合中的项目受到“阻塞条件”的约束,那么在 A 内可以排列一组唯一项目的方式有多少?
我的想法是对限制进行编码,然后使用 Python 的 itertools 之类的东西来生成排列。欢迎提出想法和建议。