如果你曾经接触过日本或东亚文化,你肯定会遇到阿米达库吉游戏:

作为维基百科解释,它是一种抽奖方式,用于随机选择N项的排列。
例如,它可以用于向N个人随机分配一个起始序列,或将N个奖品分配给N个人,等等。
理解游戏代表排列的诀窍是要认识到,每一次水平划水(称为“腿”)都会互换它的两个项目。
同一维基百科页面还解释说,N项的每个置换P对应于无限数量的Amidakuji图。水平笔画(腿)最少的一个(S)被称为那个特定排列P的“素数”。
您的任务是以这种格式(减去字母)接收具有2条或更多垂直行(在本例中为6)的Amidakuji图:
A B C D E F
| | | | | |
|-| |-| |-|
| |-| |-| |
| | | | |-|
| |-| |-| |
| | |-| |-|
| | |-| | |
|-| | |-| |
|-| |-| | |
| |-| | |-|
| | | | | |
B C A D F E并产生它的一个素数(同样,减去字母):
A B C D E F
| | | | | |
|-| | | |-|
| |-| | | |
| | | | | |
B C A D F E带有字母的第一行和最后一行不是格式的一部分。我把它们加在这里是为了显示排列。也不要求第一行或最后一行不包含腿|-|,也不要求输出尽可能紧凑。
这个特定的输入示例是维基百科页面顶部的Amidakuji图的(无限) ASCII表示之一。
关于这些ASCII图有一个不明显的规则:禁止相邻的腿。
|-|-| <- NO, this does not represent a single swap!Wikipedia解释了从一个称为“冒泡”的图表中获取一个素数的标准过程,该过程包括一遍又一遍地应用以下简化:
1)右叉到左叉:
| |-| |-| |
|-| | -> | |-|
| |-| |-| |2)消除双打:
|-| | |
|-| -> | |我不知道这种解释是否明确。您的代码可以使用该技术或生成所需素数的任何其他算法。
适用标准规则和标准津贴。(如果输入无效,则程序可能会着火。输入/输出格式可以是stdin/stdout、string参数、行列表、字符矩阵,任何对您最有用的东西,等等)

https://codegolf.stackexchange.com/questions/173536
复制相似问题