小编Ren*_*ize的帖子

有约束的随机播放

我有一个类似的问题:

我们有 20 个球,每个球都是唯一的,并通过 1 到 20 的数字进行标识。编号从 1 到 5 的球是黄色,从 6 到 10 是绿色,从 10 到 15 是红色,从 16 到 20 是蓝色。找到一种随机洗球的方法,同时遵守约束:“两个连续的球不能具有相同的颜色”。

例子:

输入/输出示例

我考虑过两种我不满意的方法,正在寻找更好的一种

  1. 随机抽取一个球,然后在所有其他颜色与前一个球不同的球中随机抽取一个球,等等。

问题:我们可能会遇到无法完成绘图的情况,例如,如果仅剩下相同颜色的球。

  1. 将球分成 4 组,每组 5 个球(每种颜色 1 个),通过随机抽取每种颜色的球形成另外 5 组,每组 4 个球。重新组装这 5 组以遵守标准(最后一组的第一个球将被排列,直到遵守标准为止)。

问题是有些组合永远不会被绘制,例如红,黄,红,黄......绿,蓝,绿,蓝。

编辑:

这是 Unlikus 解决方案的实现。非常感谢他。

import enum
import random

Color = enum.Enum('Color', ['RED', 'GREEN', 'BLUE', "YELLOW"])

NB_PERMUTATION = {
        (Color.RED, 1, 0, 0, 0): 1,
        (Color.GREEN, 0, 1, 0, 0): 1,
        (Color.BLUE, 0, 0, 1, 0): 1,
        (Color.YELLOW, 0, …
Run Code Online (Sandbox Code Playgroud)

python sorting random algorithm shuffle

6
推荐指数
2
解决办法
212
查看次数

标签 统计

algorithm ×1

python ×1

random ×1

shuffle ×1

sorting ×1