受这问题的启发。
让L是n不同元素的列表。设P是P中所有(无序)位置对的集合。设R是由P中的每对按任意顺序在L上应用对交换操作的结果。
例子:L = [1, 7, 8] P = {(1, 2), (0, 1), (0, 2)} L = [1, 7, 8] -> [1, 8, 7] -> [8, 1, 7] -> [7, 1, 8] = R
您的任务是以任何顺序输出所有可能的R (没有多重性)。
L可以有任意长度,包括0和1L的所有元素都是不同的。[1, 5]输出:[5, 1][0, 1, 2, 3]输出:[3, 2, 1, 0] [1, 0, 3, 2] [2, 3, 0, 1] [3, 0, 2, 1] [1, 2, 0, 3] [1, 3, 2, 0] [2, 0, 1, 3] [2, 1, 3, 0] [0, 2, 3, 1] [3, 1, 0, 2] [0, 3, 1, 2] [0, 1, 2, 3][150]输出:[150]发布于 2022-07-27 18:27:52
ŒcżU$Œ!y@ƒ€⁸Q由于元素保证是不同的,所以我们可以在成对的索引中交换元素对而不是元素,或者遵循问题中的描述。
ŒcżU$Œ!y@ƒ€⁸Q - Link: list of distinct integers, L
e.g. [1,7,8]
Œc - pairs [[1,7],[1,8],[7,8]]
$ - last two links as a monad:
U - upend [[7,1],[8,1],[8,7]]
ż - zip [[[1,7],[7,1]],[[1,8],[8,1]],[[7,8],[8,7]]]
Œ! - all permutations
€ - for each:
ƒ ⁸ - reduce by, starting with L:
@ - with swapped arguments:
y - translate
Q - deduplicate发布于 2022-07-27 11:57:08
这是基于克索的洞察力的。
f=(a,k,...p)=>a.map((v,i)=>f(a.filter(_=>i--),i-~k,...p,v))+a||k&1||print(p)https://codegolf.stackexchange.com/questions/250419
复制相似问题