Algorithm Scala:如何以各种可能的方式将列表拆分为元组
我们有一个仓库,每个产品放在一个地方。每个订单包含一套产品。仓库工人有一个手推车,可以存放N份订单。 对于订单列表,请找到解决该列表的所有可能解决方案 (我正在寻找一种算法,可以将列表拆分为元组,元组或元素的顺序无关紧要。) 此处举例说明了一台手推车最多可订购2个订单(N=2)Algorithm Scala:如何以各种可能的方式将列表拆分为元组,algorithm,scala,list,tuples,combinations,Algorithm,Scala,List,Tuples,Combinations,我们有一个仓库,每个产品放在一个地方。每个订单包含一套产品。仓库工人有一个手推车,可以存放N份订单。 对于订单列表,请找到解决该列表的所有可能解决方案 (我正在寻找一种算法,可以将列表拆分为元组,元组或元素的顺序无关紧要。) 此处举例说明了一台手推车最多可订购2个订单(N=2) val orders = List(1,2,3,4) findAllSolutions(orders, 2) List( Solution(Trolley(1,2),Trolley(3,4)), Sol
val orders = List(1,2,3,4)
findAllSolutions(orders, 2)
List(
Solution(Trolley(1,2),Trolley(3,4)),
Solution(Trolley(1,3),Trolley(2,4)),
Solution(Trolley(1,4),Trolley(2,3))
)
我可以试一下
def tuplelize(lst: List[Int], tplLen) = List(1,2,3,4).permutations.map(l => l.grouped(tplLen).toList)
但这会多次产生相同的结果。例如
List((1,2),(3,4))
及
是一样的
一种可能性是:
List(1,2,3,4).combinations(2).combinations(2).filter(_.flatten.toSet.size == 4)
但这似乎效率很低。。。
另一个澄清问题的例子是:
给定的是一个列表(1,2,3,4,5),我想将其拆分为最大长度为3的子列表。以最少的子列表数量给出所有可能的解决方案,这样每个元素在一个解决方案中只能找到一次
Solution1: List(List(1,2,3),List(4,5))
Solution2: List(List(1,2,4),List(3,5))
Solution2: List(List(1,2,5),List(3,4))
...
现在,一个不需要的解决方案是:
DoubleSolution: List(List(3,2,1),List(5,4))
枚举具有最小子集数的分区,这样除了最多一个子集之外,所有子集的大小都最多为M
。
以下代码执行以下操作:
给定一个不同元素的列表和一些大小的M
,它枚举类型为list[list[Int]]
的所有分区,以便:
- 分区的每个子集(由
表示)最多包含List[Int]
个元素M
- 子集的数量是最小的
- 最多有一个子集的元素少于
M
M
,最多有一个例外。然后,异常的大小为N%M
,其中N
是原始列表中的元素数
解决方案 事实证明,这并不完全是微不足道的。特别是子集的大小不必划分元素的数量这一事实令人讨厌,因为它以另一种方式破坏了对称性 以下是一个由三个阶段组成的解决方案:
sameSizePartitions
)PrescriptedSizePartition
)PrescriptedSizePartition
的瘦包装器maxSizePartitions
前加前缀type Partition = List[List[Int]]
def sameSizePartitions(elems: List[Int], partSize: Int): List[Partition] = {
def recHelper(unused: List[Int]): List[Partition] = {
if (unused.size <= partSize) {
List(List(unused))
} else {
val h :: t = unused
(for {
combination <- t.combinations(partSize - 1)
tail <- recHelper(t filterNot combination.contains)
} yield (h :: combination) :: tail).toList
}
}
recHelper(elems)
}
/**
* @param elems list with unique elements
* @param sizes map (size -> numberOfPartitionsWithThisSize)
*/
def prescribedSizePartitions(elems: List[Int], sizes: Map[Int, Int]): List[Partition] = {
if (sizes.isEmpty) {
if (elems.isEmpty) List(Nil)
else throw new IllegalArgumentException("sizes empty, but elems = " + elems)
} else {
val (size, numberOfPartitions) = sizes.head
val numElementsNeededForPartitionsOfThisSize = size * numberOfPartitions
for {
elemSelection <- elems.combinations(numElementsNeededForPartitionsOfThisSize).toList
tailPartition <- prescribedSizePartitions(elems.filterNot(elemSelection.contains), sizes - size)
currSizePart <- sameSizePartitions(elemSelection, size)
} yield currSizePart ++ tailPartition
}
}
def maxSizePartitions(elems: List[Int], maxSize: Int): List[Partition] = {
val n = elems.size
val ofMaxSize = n / maxSize
val restSize = n % maxSize
if (restSize == 0) {
sameSizePartitions(elems, maxSize)
} else {
prescribedSizePartitions(elems, Map(maxSize -> ofMaxSize, restSize -> 1))
}
}
输出:
List(List(1, 2), List(3, 4))
List(List(1, 3), List(2, 4))
List(List(1, 4), List(2, 3))
List(List(1, 2, 3), List(4, 5))
List(List(1, 2, 4), List(3, 5))
List(List(1, 2, 5), List(3, 4))
List(List(1, 3, 4), List(2, 5))
List(List(1, 3, 5), List(2, 4))
List(List(1, 4, 5), List(2, 3))
List(List(2, 3, 4), List(1, 5))
List(List(2, 3, 5), List(1, 4))
List(List(2, 4, 5), List(1, 3))
List(List(3, 4, 5), List(1, 2))
List(List(1, 2, 3), List(4, 5, 6), List(7, 8))
List(List(1, 2, 4), List(3, 5, 6), List(7, 8))
List(List(1, 2, 5), List(3, 4, 6), List(7, 8))
List(List(1, 2, 6), List(3, 4, 5), List(7, 8))
List(List(1, 3, 4), List(2, 5, 6), List(7, 8))
List(List(1, 3, 5), List(2, 4, 6), List(7, 8))
List(List(1, 3, 6), List(2, 4, 5), List(7, 8))
List(List(1, 4, 5), List(2, 3, 6), List(7, 8))
List(List(1, 4, 6), List(2, 3, 5), List(7, 8))
List(List(1, 5, 6), List(2, 3, 4), List(7, 8))
List(List(1, 2, 3), List(4, 5, 7), List(6, 8))
List(List(1, 2, 4), List(3, 5, 7), List(6, 8))
List(List(1, 2, 5), List(3, 4, 7), List(6, 8))
List(List(1, 2, 7), List(3, 4, 5), List(6, 8))
List(List(1, 3, 4), List(2, 5, 7), List(6, 8))
List(List(1, 3, 5), List(2, 4, 7), List(6, 8))
List(List(1, 3, 7), List(2, 4, 5), List(6, 8))
List(List(1, 4, 5), List(2, 3, 7), List(6, 8))
List(List(1, 4, 7), List(2, 3, 5), List(6, 8))
List(List(1, 5, 7), List(2, 3, 4), List(6, 8))
List(List(1, 2, 3), List(4, 5, 8), List(6, 7))
List(List(1, 2, 4), List(3, 5, 8), List(6, 7))
List(List(1, 2, 5), List(3, 4, 8), List(6, 7))
List(List(1, 2, 8), List(3, 4, 5), List(6, 7))
List(List(1, 3, 4), List(2, 5, 8), List(6, 7))
List(List(1, 3, 5), List(2, 4, 8), List(6, 7))
List(List(1, 3, 8), List(2, 4, 5), List(6, 7))
List(List(1, 4, 5), List(2, 3, 8), List(6, 7))
List(List(1, 4, 8), List(2, 3, 5), List(6, 7))
List(List(1, 5, 8), List(2, 3, 4), List(6, 7))
List(List(1, 2, 3), List(4, 6, 7), List(5, 8))
List(List(1, 2, 4), List(3, 6, 7), List(5, 8))
List(List(1, 2, 6), List(3, 4, 7), List(5, 8))
List(List(1, 2, 7), List(3, 4, 6), List(5, 8))
List(List(1, 3, 4), List(2, 6, 7), List(5, 8))
List(List(1, 3, 6), List(2, 4, 7), List(5, 8))
List(List(1, 3, 7), List(2, 4, 6), List(5, 8))
List(List(1, 4, 6), List(2, 3, 7), List(5, 8))
List(List(1, 4, 7), List(2, 3, 6), List(5, 8))
List(List(1, 6, 7), List(2, 3, 4), List(5, 8))
List(List(1, 2, 3), List(4, 6, 8), List(5, 7))
List(List(1, 2, 4), List(3, 6, 8), List(5, 7))
List(List(1, 2, 6), List(3, 4, 8), List(5, 7))
List(List(1, 2, 8), List(3, 4, 6), List(5, 7))
List(List(1, 3, 4), List(2, 6, 8), List(5, 7))
List(List(1, 3, 6), List(2, 4, 8), List(5, 7))
List(List(1, 3, 8), List(2, 4, 6), List(5, 7))
List(List(1, 4, 6), List(2, 3, 8), List(5, 7))
List(List(1, 4, 8), List(2, 3, 6), List(5, 7))
List(List(1, 6, 8), List(2, 3, 4), List(5, 7))
List(List(1, 2, 3), List(4, 7, 8), List(5, 6))
List(List(1, 2, 4), List(3, 7, 8), List(5, 6))
List(List(1, 2, 7), List(3, 4, 8), List(5, 6))
List(List(1, 2, 8), List(3, 4, 7), List(5, 6))
List(List(1, 3, 4), List(2, 7, 8), List(5, 6))
List(List(1, 3, 7), List(2, 4, 8), List(5, 6))
List(List(1, 3, 8), List(2, 4, 7), List(5, 6))
List(List(1, 4, 7), List(2, 3, 8), List(5, 6))
List(List(1, 4, 8), List(2, 3, 7), List(5, 6))
List(List(1, 7, 8), List(2, 3, 4), List(5, 6))
List(List(1, 2, 3), List(5, 6, 7), List(4, 8))
List(List(1, 2, 5), List(3, 6, 7), List(4, 8))
List(List(1, 2, 6), List(3, 5, 7), List(4, 8))
List(List(1, 2, 7), List(3, 5, 6), List(4, 8))
List(List(1, 3, 5), List(2, 6, 7), List(4, 8))
List(List(1, 3, 6), List(2, 5, 7), List(4, 8))
List(List(1, 3, 7), List(2, 5, 6), List(4, 8))
List(List(1, 5, 6), List(2, 3, 7), List(4, 8))
List(List(1, 5, 7), List(2, 3, 6), List(4, 8))
List(List(1, 6, 7), List(2, 3, 5), List(4, 8))
List(List(1, 2, 3), List(5, 6, 8), List(4, 7))
List(List(1, 2, 5), List(3, 6, 8), List(4, 7))
List(List(1, 2, 6), List(3, 5, 8), List(4, 7))
List(List(1, 2, 8), List(3, 5, 6), List(4, 7))
List(List(1, 3, 5), List(2, 6, 8), List(4, 7))
List(List(1, 3, 6), List(2, 5, 8), List(4, 7))
List(List(1, 3, 8), List(2, 5, 6), List(4, 7))
List(List(1, 5, 6), List(2, 3, 8), List(4, 7))
List(List(1, 5, 8), List(2, 3, 6), List(4, 7))
List(List(1, 6, 8), List(2, 3, 5), List(4, 7))
List(List(1, 2, 3), List(5, 7, 8), List(4, 6))
List(List(1, 2, 5), List(3, 7, 8), List(4, 6))
List(List(1, 2, 7), List(3, 5, 8), List(4, 6))
List(List(1, 2, 8), List(3, 5, 7), List(4, 6))
List(List(1, 3, 5), List(2, 7, 8), List(4, 6))
List(List(1, 3, 7), List(2, 5, 8), List(4, 6))
List(List(1, 3, 8), List(2, 5, 7), List(4, 6))
List(List(1, 5, 7), List(2, 3, 8), List(4, 6))
List(List(1, 5, 8), List(2, 3, 7), List(4, 6))
List(List(1, 7, 8), List(2, 3, 5), List(4, 6))
List(List(1, 2, 3), List(6, 7, 8), List(4, 5))
List(List(1, 2, 6), List(3, 7, 8), List(4, 5))
List(List(1, 2, 7), List(3, 6, 8), List(4, 5))
List(List(1, 2, 8), List(3, 6, 7), List(4, 5))
List(List(1, 3, 6), List(2, 7, 8), List(4, 5))
List(List(1, 3, 7), List(2, 6, 8), List(4, 5))
List(List(1, 3, 8), List(2, 6, 7), List(4, 5))
List(List(1, 6, 7), List(2, 3, 8), List(4, 5))
List(List(1, 6, 8), List(2, 3, 7), List(4, 5))
List(List(1, 7, 8), List(2, 3, 6), List(4, 5))
List(List(1, 2, 4), List(5, 6, 7), List(3, 8))
List(List(1, 2, 5), List(4, 6, 7), List(3, 8))
List(List(1, 2, 6), List(4, 5, 7), List(3, 8))
List(List(1, 2, 7), List(4, 5, 6), List(3, 8))
List(List(1, 4, 5), List(2, 6, 7), List(3, 8))
List(List(1, 4, 6), List(2, 5, 7), List(3, 8))
List(List(1, 4, 7), List(2, 5, 6), List(3, 8))
List(List(1, 5, 6), List(2, 4, 7), List(3, 8))
List(List(1, 5, 7), List(2, 4, 6), List(3, 8))
List(List(1, 6, 7), List(2, 4, 5), List(3, 8))
List(List(1, 2, 4), List(5, 6, 8), List(3, 7))
List(List(1, 2, 5), List(4, 6, 8), List(3, 7))
List(List(1, 2, 6), List(4, 5, 8), List(3, 7))
List(List(1, 2, 8), List(4, 5, 6), List(3, 7))
List(List(1, 4, 5), List(2, 6, 8), List(3, 7))
List(List(1, 4, 6), List(2, 5, 8), List(3, 7))
List(List(1, 4, 8), List(2, 5, 6), List(3, 7))
List(List(1, 5, 6), List(2, 4, 8), List(3, 7))
List(List(1, 5, 8), List(2, 4, 6), List(3, 7))
List(List(1, 6, 8), List(2, 4, 5), List(3, 7))
List(List(1, 2, 4), List(5, 7, 8), List(3, 6))
List(List(1, 2, 5), List(4, 7, 8), List(3, 6))
List(List(1, 2, 7), List(4, 5, 8), List(3, 6))
List(List(1, 2, 8), List(4, 5, 7), List(3, 6))
List(List(1, 4, 5), List(2, 7, 8), List(3, 6))
List(List(1, 4, 7), List(2, 5, 8), List(3, 6))
List(List(1, 4, 8), List(2, 5, 7), List(3, 6))
List(List(1, 5, 7), List(2, 4, 8), List(3, 6))
List(List(1, 5, 8), List(2, 4, 7), List(3, 6))
List(List(1, 7, 8), List(2, 4, 5), List(3, 6))
List(List(1, 2, 4), List(6, 7, 8), List(3, 5))
List(List(1, 2, 6), List(4, 7, 8), List(3, 5))
List(List(1, 2, 7), List(4, 6, 8), List(3, 5))
List(List(1, 2, 8), List(4, 6, 7), List(3, 5))
List(List(1, 4, 6), List(2, 7, 8), List(3, 5))
List(List(1, 4, 7), List(2, 6, 8), List(3, 5))
List(List(1, 4, 8), List(2, 6, 7), List(3, 5))
List(List(1, 6, 7), List(2, 4, 8), List(3, 5))
List(List(1, 6, 8), List(2, 4, 7), List(3, 5))
List(List(1, 7, 8), List(2, 4, 6), List(3, 5))
List(List(1, 2, 5), List(6, 7, 8), List(3, 4))
List(List(1, 2, 6), List(5, 7, 8), List(3, 4))
List(List(1, 2, 7), List(5, 6, 8), List(3, 4))
List(List(1, 2, 8), List(5, 6, 7), List(3, 4))
List(List(1, 5, 6), List(2, 7, 8), List(3, 4))
List(List(1, 5, 7), List(2, 6, 8), List(3, 4))
List(List(1, 5, 8), List(2, 6, 7), List(3, 4))
List(List(1, 6, 7), List(2, 5, 8), List(3, 4))
List(List(1, 6, 8), List(2, 5, 7), List(3, 4))
List(List(1, 7, 8), List(2, 5, 6), List(3, 4))
List(List(1, 3, 4), List(5, 6, 7), List(2, 8))
List(List(1, 3, 5), List(4, 6, 7), List(2, 8))
List(List(1, 3, 6), List(4, 5, 7), List(2, 8))
List(List(1, 3, 7), List(4, 5, 6), List(2, 8))
List(List(1, 4, 5), List(3, 6, 7), List(2, 8))
List(List(1, 4, 6), List(3, 5, 7), List(2, 8))
List(List(1, 4, 7), List(3, 5, 6), List(2, 8))
List(List(1, 5, 6), List(3, 4, 7), List(2, 8))
List(List(1, 5, 7), List(3, 4, 6), List(2, 8))
List(List(1, 6, 7), List(3, 4, 5), List(2, 8))
List(List(1, 3, 4), List(5, 6, 8), List(2, 7))
List(List(1, 3, 5), List(4, 6, 8), List(2, 7))
List(List(1, 3, 6), List(4, 5, 8), List(2, 7))
List(List(1, 3, 8), List(4, 5, 6), List(2, 7))
List(List(1, 4, 5), List(3, 6, 8), List(2, 7))
List(List(1, 4, 6), List(3, 5, 8), List(2, 7))
List(List(1, 4, 8), List(3, 5, 6), List(2, 7))
List(List(1, 5, 6), List(3, 4, 8), List(2, 7))
List(List(1, 5, 8), List(3, 4, 6), List(2, 7))
List(List(1, 6, 8), List(3, 4, 5), List(2, 7))
List(List(1, 3, 4), List(5, 7, 8), List(2, 6))
List(List(1, 3, 5), List(4, 7, 8), List(2, 6))
List(List(1, 3, 7), List(4, 5, 8), List(2, 6))
List(List(1, 3, 8), List(4, 5, 7), List(2, 6))
List(List(1, 4, 5), List(3, 7, 8), List(2, 6))
List(List(1, 4, 7), List(3, 5, 8), List(2, 6))
List(List(1, 4, 8), List(3, 5, 7), List(2, 6))
List(List(1, 5, 7), List(3, 4, 8), List(2, 6))
List(List(1, 5, 8), List(3, 4, 7), List(2, 6))
List(List(1, 7, 8), List(3, 4, 5), List(2, 6))
List(List(1, 3, 4), List(6, 7, 8), List(2, 5))
List(List(1, 3, 6), List(4, 7, 8), List(2, 5))
List(List(1, 3, 7), List(4, 6, 8), List(2, 5))
List(List(1, 3, 8), List(4, 6, 7), List(2, 5))
List(List(1, 4, 6), List(3, 7, 8), List(2, 5))
List(List(1, 4, 7), List(3, 6, 8), List(2, 5))
List(List(1, 4, 8), List(3, 6, 7), List(2, 5))
List(List(1, 6, 7), List(3, 4, 8), List(2, 5))
List(List(1, 6, 8), List(3, 4, 7), List(2, 5))
List(List(1, 7, 8), List(3, 4, 6), List(2, 5))
List(List(1, 3, 5), List(6, 7, 8), List(2, 4))
List(List(1, 3, 6), List(5, 7, 8), List(2, 4))
List(List(1, 3, 7), List(5, 6, 8), List(2, 4))
List(List(1, 3, 8), List(5, 6, 7), List(2, 4))
List(List(1, 5, 6), List(3, 7, 8), List(2, 4))
List(List(1, 5, 7), List(3, 6, 8), List(2, 4))
List(List(1, 5, 8), List(3, 6, 7), List(2, 4))
List(List(1, 6, 7), List(3, 5, 8), List(2, 4))
List(List(1, 6, 8), List(3, 5, 7), List(2, 4))
List(List(1, 7, 8), List(3, 5, 6), List(2, 4))
List(List(1, 4, 5), List(6, 7, 8), List(2, 3))
List(List(1, 4, 6), List(5, 7, 8), List(2, 3))
List(List(1, 4, 7), List(5, 6, 8), List(2, 3))
List(List(1, 4, 8), List(5, 6, 7), List(2, 3))
List(List(1, 5, 6), List(4, 7, 8), List(2, 3))
List(List(1, 5, 7), List(4, 6, 8), List(2, 3))
List(List(1, 5, 8), List(4, 6, 7), List(2, 3))
List(List(1, 6, 7), List(4, 5, 8), List(2, 3))
List(List(1, 6, 8), List(4, 5, 7), List(2, 3))
List(List(1, 7, 8), List(4, 5, 6), List(2, 3))
List(List(2, 3, 4), List(5, 6, 7), List(1, 8))
List(List(2, 3, 5), List(4, 6, 7), List(1, 8))
List(List(2, 3, 6), List(4, 5, 7), List(1, 8))
List(List(2, 3, 7), List(4, 5, 6), List(1, 8))
List(List(2, 4, 5), List(3, 6, 7), List(1, 8))
List(List(2, 4, 6), List(3, 5, 7), List(1, 8))
List(List(2, 4, 7), List(3, 5, 6), List(1, 8))
List(List(2, 5, 6), List(3, 4, 7), List(1, 8))
List(List(2, 5, 7), List(3, 4, 6), List(1, 8))
List(List(2, 6, 7), List(3, 4, 5), List(1, 8))
List(List(2, 3, 4), List(5, 6, 8), List(1, 7))
List(List(2, 3, 5), List(4, 6, 8), List(1, 7))
List(List(2, 3, 6), List(4, 5, 8), List(1, 7))
List(List(2, 3, 8), List(4, 5, 6), List(1, 7))
List(List(2, 4, 5), List(3, 6, 8), List(1, 7))
List(List(2, 4, 6), List(3, 5, 8), List(1, 7))
List(List(2, 4, 8), List(3, 5, 6), List(1, 7))
List(List(2, 5, 6), List(3, 4, 8), List(1, 7))
List(List(2, 5, 8), List(3, 4, 6), List(1, 7))
List(List(2, 6, 8), List(3, 4, 5), List(1, 7))
List(List(2, 3, 4), List(5, 7, 8), List(1, 6))
List(List(2, 3, 5), List(4, 7, 8), List(1, 6))
List(List(2, 3, 7), List(4, 5, 8), List(1, 6))
List(List(2, 3, 8), List(4, 5, 7), List(1, 6))
List(List(2, 4, 5), List(3, 7, 8), List(1, 6))
List(List(2, 4, 7), List(3, 5, 8), List(1, 6))
List(List(2, 4, 8), List(3, 5, 7), List(1, 6))
List(List(2, 5, 7), List(3, 4, 8), List(1, 6))
List(List(2, 5, 8), List(3, 4, 7), List(1, 6))
List(List(2, 7, 8), List(3, 4, 5), List(1, 6))
List(List(2, 3, 4), List(6, 7, 8), List(1, 5))
List(List(2, 3, 6), List(4, 7, 8), List(1, 5))
List(List(2, 3, 7), List(4, 6, 8), List(1, 5))
List(List(2, 3, 8), List(4, 6, 7), List(1, 5))
List(List(2, 4, 6), List(3, 7, 8), List(1, 5))
List(List(2, 4, 7), List(3, 6, 8), List(1, 5))
List(List(2, 4, 8), List(3, 6, 7), List(1, 5))
List(List(2, 6, 7), List(3, 4, 8), List(1, 5))
List(List(2, 6, 8), List(3, 4, 7), List(1, 5))
List(List(2, 7, 8), List(3, 4, 6), List(1, 5))
List(List(2, 3, 5), List(6, 7, 8), List(1, 4))
List(List(2, 3, 6), List(5, 7, 8), List(1, 4))
List(List(2, 3, 7), List(5, 6, 8), List(1, 4))
List(List(2, 3, 8), List(5, 6, 7), List(1, 4))
List(List(2, 5, 6), List(3, 7, 8), List(1, 4))
List(List(2, 5, 7), List(3, 6, 8), List(1, 4))
List(List(2, 5, 8), List(3, 6, 7), List(1, 4))
List(List(2, 6, 7), List(3, 5, 8), List(1, 4))
List(List(2, 6, 8), List(3, 5, 7), List(1, 4))
List(List(2, 7, 8), List(3, 5, 6), List(1, 4))
List(List(2, 4, 5), List(6, 7, 8), List(1, 3))
List(List(2, 4, 6), List(5, 7, 8), List(1, 3))
List(List(2, 4, 7), List(5, 6, 8), List(1, 3))
List(List(2, 4, 8), List(5, 6, 7), List(1, 3))
List(List(2, 5, 6), List(4, 7, 8), List(1, 3))
List(List(2, 5, 7), List(4, 6, 8), List(1, 3))
List(List(2, 5, 8), List(4, 6, 7), List(1, 3))
List(List(2, 6, 7), List(4, 5, 8), List(1, 3))
List(List(2, 6, 8), List(4, 5, 7), List(1, 3))
List(List(2, 7, 8), List(4, 5, 6), List(1, 3))
List(List(3, 4, 5), List(6, 7, 8), List(1, 2))
List(List(3, 4, 6), List(5, 7, 8), List(1, 2))
List(List(3, 4, 7), List(5, 6, 8), List(1, 2))
List(List(3, 4, 8), List(5, 6, 7), List(1, 2))
List(List(3, 5, 6), List(4, 7, 8), List(1, 2))
List(List(3, 5, 7), List(4, 6, 8), List(1, 2))
List(List(3, 5, 8), List(4, 6, 7), List(1, 2))
List(List(3, 6, 7), List(4, 5, 8), List(1, 2))
List(List(3, 6, 8), List(4, 5, 7), List(1, 2))
List(List(3, 7, 8), List(4, 5, 6), List(1, 2))
我希望这次我解决了正确的问题?好的,到目前为止,这就是我得到的:
scala> List(1,2,3,4).permutations.map(x => x.sliding(2,2).toSet).flatten.map(z => z.sorted).toSet
res24: scala.collection.immutable.Set[List[Int]] = Set(List(3, 4), List(1, 2), List(2, 3), List(1, 4), List(2, 4), List(1, 3))
我认为这更接近预期的结果,但不完全符合预期的格式
编辑:
到目前为止一切顺利:
scala> val resultSet = List(1,2,3,4).permutations.map(x => x.sliding(2,2).toSet).flatten.map(z => z.sorted).toSet.toList
resultSet: List[List[Int]] = List(List(3, 4), List(1, 2), List(2, 3), List(1, 4), List(2, 4), List(1, 3))
scala> resultSet.reverse.sliding(2,2).toList
res1: List[List[List[Int]]] = List(List(List(1, 3), List(2, 4)), List(List(1, 4), List(2, 3)), List(List(1, 2), List(3, 4)))
是的,这只适用于需要大小为2的元组的情况,所以不是很动态。¯\_(ツ)_/“请参考此链接,我不明白
tplLen
到底应该是什么。您能举一个例子,说明并非所有内容都是2x2x2x2吗?您的tupleize
似乎不返回元组列表的iterable,它返回列表的iterable。确实不想将其重命名为“listlize”;)像List(List(1,2),List(3,4))
和List(List(3,4),List(1,2))
这样的东西也是不需要的,因为被认为是重复的?是的,你得到了。。。因此,我的“解决方案”组合了两个组合
调用将不起作用。我认为这是因为tplLen
不必划分lst的大小,这使得它非常糟糕……对不起,不是我想要的,请查看我的示例列表(列表((1,2),(3,4)),列表((1,3),(2,4)),列表((1,4),(2,3)))嗨,谢谢。但该解决方案不适用于其他参数:例如,列表1到9的滑动(3,3)
List(List(1, 2), List(3, 4))
List(List(1, 3), List(2, 4))
List(List(1, 4), List(2, 3))
List(List(1, 2, 3), List(4, 5))
List(List(1, 2, 4), List(3, 5))
List(List(1, 2, 5), List(3, 4))
List(List(1, 3, 4), List(2, 5))
List(List(1, 3, 5), List(2, 4))
List(List(1, 4, 5), List(2, 3))
List(List(2, 3, 4), List(1, 5))
List(List(2, 3, 5), List(1, 4))
List(List(2, 4, 5), List(1, 3))
List(List(3, 4, 5), List(1, 2))
List(List(1, 2, 3), List(4, 5, 6), List(7, 8))
List(List(1, 2, 4), List(3, 5, 6), List(7, 8))
List(List(1, 2, 5), List(3, 4, 6), List(7, 8))
List(List(1, 2, 6), List(3, 4, 5), List(7, 8))
List(List(1, 3, 4), List(2, 5, 6), List(7, 8))
List(List(1, 3, 5), List(2, 4, 6), List(7, 8))
List(List(1, 3, 6), List(2, 4, 5), List(7, 8))
List(List(1, 4, 5), List(2, 3, 6), List(7, 8))
List(List(1, 4, 6), List(2, 3, 5), List(7, 8))
List(List(1, 5, 6), List(2, 3, 4), List(7, 8))
List(List(1, 2, 3), List(4, 5, 7), List(6, 8))
List(List(1, 2, 4), List(3, 5, 7), List(6, 8))
List(List(1, 2, 5), List(3, 4, 7), List(6, 8))
List(List(1, 2, 7), List(3, 4, 5), List(6, 8))
List(List(1, 3, 4), List(2, 5, 7), List(6, 8))
List(List(1, 3, 5), List(2, 4, 7), List(6, 8))
List(List(1, 3, 7), List(2, 4, 5), List(6, 8))
List(List(1, 4, 5), List(2, 3, 7), List(6, 8))
List(List(1, 4, 7), List(2, 3, 5), List(6, 8))
List(List(1, 5, 7), List(2, 3, 4), List(6, 8))
List(List(1, 2, 3), List(4, 5, 8), List(6, 7))
List(List(1, 2, 4), List(3, 5, 8), List(6, 7))
List(List(1, 2, 5), List(3, 4, 8), List(6, 7))
List(List(1, 2, 8), List(3, 4, 5), List(6, 7))
List(List(1, 3, 4), List(2, 5, 8), List(6, 7))
List(List(1, 3, 5), List(2, 4, 8), List(6, 7))
List(List(1, 3, 8), List(2, 4, 5), List(6, 7))
List(List(1, 4, 5), List(2, 3, 8), List(6, 7))
List(List(1, 4, 8), List(2, 3, 5), List(6, 7))
List(List(1, 5, 8), List(2, 3, 4), List(6, 7))
List(List(1, 2, 3), List(4, 6, 7), List(5, 8))
List(List(1, 2, 4), List(3, 6, 7), List(5, 8))
List(List(1, 2, 6), List(3, 4, 7), List(5, 8))
List(List(1, 2, 7), List(3, 4, 6), List(5, 8))
List(List(1, 3, 4), List(2, 6, 7), List(5, 8))
List(List(1, 3, 6), List(2, 4, 7), List(5, 8))
List(List(1, 3, 7), List(2, 4, 6), List(5, 8))
List(List(1, 4, 6), List(2, 3, 7), List(5, 8))
List(List(1, 4, 7), List(2, 3, 6), List(5, 8))
List(List(1, 6, 7), List(2, 3, 4), List(5, 8))
List(List(1, 2, 3), List(4, 6, 8), List(5, 7))
List(List(1, 2, 4), List(3, 6, 8), List(5, 7))
List(List(1, 2, 6), List(3, 4, 8), List(5, 7))
List(List(1, 2, 8), List(3, 4, 6), List(5, 7))
List(List(1, 3, 4), List(2, 6, 8), List(5, 7))
List(List(1, 3, 6), List(2, 4, 8), List(5, 7))
List(List(1, 3, 8), List(2, 4, 6), List(5, 7))
List(List(1, 4, 6), List(2, 3, 8), List(5, 7))
List(List(1, 4, 8), List(2, 3, 6), List(5, 7))
List(List(1, 6, 8), List(2, 3, 4), List(5, 7))
List(List(1, 2, 3), List(4, 7, 8), List(5, 6))
List(List(1, 2, 4), List(3, 7, 8), List(5, 6))
List(List(1, 2, 7), List(3, 4, 8), List(5, 6))
List(List(1, 2, 8), List(3, 4, 7), List(5, 6))
List(List(1, 3, 4), List(2, 7, 8), List(5, 6))
List(List(1, 3, 7), List(2, 4, 8), List(5, 6))
List(List(1, 3, 8), List(2, 4, 7), List(5, 6))
List(List(1, 4, 7), List(2, 3, 8), List(5, 6))
List(List(1, 4, 8), List(2, 3, 7), List(5, 6))
List(List(1, 7, 8), List(2, 3, 4), List(5, 6))
List(List(1, 2, 3), List(5, 6, 7), List(4, 8))
List(List(1, 2, 5), List(3, 6, 7), List(4, 8))
List(List(1, 2, 6), List(3, 5, 7), List(4, 8))
List(List(1, 2, 7), List(3, 5, 6), List(4, 8))
List(List(1, 3, 5), List(2, 6, 7), List(4, 8))
List(List(1, 3, 6), List(2, 5, 7), List(4, 8))
List(List(1, 3, 7), List(2, 5, 6), List(4, 8))
List(List(1, 5, 6), List(2, 3, 7), List(4, 8))
List(List(1, 5, 7), List(2, 3, 6), List(4, 8))
List(List(1, 6, 7), List(2, 3, 5), List(4, 8))
List(List(1, 2, 3), List(5, 6, 8), List(4, 7))
List(List(1, 2, 5), List(3, 6, 8), List(4, 7))
List(List(1, 2, 6), List(3, 5, 8), List(4, 7))
List(List(1, 2, 8), List(3, 5, 6), List(4, 7))
List(List(1, 3, 5), List(2, 6, 8), List(4, 7))
List(List(1, 3, 6), List(2, 5, 8), List(4, 7))
List(List(1, 3, 8), List(2, 5, 6), List(4, 7))
List(List(1, 5, 6), List(2, 3, 8), List(4, 7))
List(List(1, 5, 8), List(2, 3, 6), List(4, 7))
List(List(1, 6, 8), List(2, 3, 5), List(4, 7))
List(List(1, 2, 3), List(5, 7, 8), List(4, 6))
List(List(1, 2, 5), List(3, 7, 8), List(4, 6))
List(List(1, 2, 7), List(3, 5, 8), List(4, 6))
List(List(1, 2, 8), List(3, 5, 7), List(4, 6))
List(List(1, 3, 5), List(2, 7, 8), List(4, 6))
List(List(1, 3, 7), List(2, 5, 8), List(4, 6))
List(List(1, 3, 8), List(2, 5, 7), List(4, 6))
List(List(1, 5, 7), List(2, 3, 8), List(4, 6))
List(List(1, 5, 8), List(2, 3, 7), List(4, 6))
List(List(1, 7, 8), List(2, 3, 5), List(4, 6))
List(List(1, 2, 3), List(6, 7, 8), List(4, 5))
List(List(1, 2, 6), List(3, 7, 8), List(4, 5))
List(List(1, 2, 7), List(3, 6, 8), List(4, 5))
List(List(1, 2, 8), List(3, 6, 7), List(4, 5))
List(List(1, 3, 6), List(2, 7, 8), List(4, 5))
List(List(1, 3, 7), List(2, 6, 8), List(4, 5))
List(List(1, 3, 8), List(2, 6, 7), List(4, 5))
List(List(1, 6, 7), List(2, 3, 8), List(4, 5))
List(List(1, 6, 8), List(2, 3, 7), List(4, 5))
List(List(1, 7, 8), List(2, 3, 6), List(4, 5))
List(List(1, 2, 4), List(5, 6, 7), List(3, 8))
List(List(1, 2, 5), List(4, 6, 7), List(3, 8))
List(List(1, 2, 6), List(4, 5, 7), List(3, 8))
List(List(1, 2, 7), List(4, 5, 6), List(3, 8))
List(List(1, 4, 5), List(2, 6, 7), List(3, 8))
List(List(1, 4, 6), List(2, 5, 7), List(3, 8))
List(List(1, 4, 7), List(2, 5, 6), List(3, 8))
List(List(1, 5, 6), List(2, 4, 7), List(3, 8))
List(List(1, 5, 7), List(2, 4, 6), List(3, 8))
List(List(1, 6, 7), List(2, 4, 5), List(3, 8))
List(List(1, 2, 4), List(5, 6, 8), List(3, 7))
List(List(1, 2, 5), List(4, 6, 8), List(3, 7))
List(List(1, 2, 6), List(4, 5, 8), List(3, 7))
List(List(1, 2, 8), List(4, 5, 6), List(3, 7))
List(List(1, 4, 5), List(2, 6, 8), List(3, 7))
List(List(1, 4, 6), List(2, 5, 8), List(3, 7))
List(List(1, 4, 8), List(2, 5, 6), List(3, 7))
List(List(1, 5, 6), List(2, 4, 8), List(3, 7))
List(List(1, 5, 8), List(2, 4, 6), List(3, 7))
List(List(1, 6, 8), List(2, 4, 5), List(3, 7))
List(List(1, 2, 4), List(5, 7, 8), List(3, 6))
List(List(1, 2, 5), List(4, 7, 8), List(3, 6))
List(List(1, 2, 7), List(4, 5, 8), List(3, 6))
List(List(1, 2, 8), List(4, 5, 7), List(3, 6))
List(List(1, 4, 5), List(2, 7, 8), List(3, 6))
List(List(1, 4, 7), List(2, 5, 8), List(3, 6))
List(List(1, 4, 8), List(2, 5, 7), List(3, 6))
List(List(1, 5, 7), List(2, 4, 8), List(3, 6))
List(List(1, 5, 8), List(2, 4, 7), List(3, 6))
List(List(1, 7, 8), List(2, 4, 5), List(3, 6))
List(List(1, 2, 4), List(6, 7, 8), List(3, 5))
List(List(1, 2, 6), List(4, 7, 8), List(3, 5))
List(List(1, 2, 7), List(4, 6, 8), List(3, 5))
List(List(1, 2, 8), List(4, 6, 7), List(3, 5))
List(List(1, 4, 6), List(2, 7, 8), List(3, 5))
List(List(1, 4, 7), List(2, 6, 8), List(3, 5))
List(List(1, 4, 8), List(2, 6, 7), List(3, 5))
List(List(1, 6, 7), List(2, 4, 8), List(3, 5))
List(List(1, 6, 8), List(2, 4, 7), List(3, 5))
List(List(1, 7, 8), List(2, 4, 6), List(3, 5))
List(List(1, 2, 5), List(6, 7, 8), List(3, 4))
List(List(1, 2, 6), List(5, 7, 8), List(3, 4))
List(List(1, 2, 7), List(5, 6, 8), List(3, 4))
List(List(1, 2, 8), List(5, 6, 7), List(3, 4))
List(List(1, 5, 6), List(2, 7, 8), List(3, 4))
List(List(1, 5, 7), List(2, 6, 8), List(3, 4))
List(List(1, 5, 8), List(2, 6, 7), List(3, 4))
List(List(1, 6, 7), List(2, 5, 8), List(3, 4))
List(List(1, 6, 8), List(2, 5, 7), List(3, 4))
List(List(1, 7, 8), List(2, 5, 6), List(3, 4))
List(List(1, 3, 4), List(5, 6, 7), List(2, 8))
List(List(1, 3, 5), List(4, 6, 7), List(2, 8))
List(List(1, 3, 6), List(4, 5, 7), List(2, 8))
List(List(1, 3, 7), List(4, 5, 6), List(2, 8))
List(List(1, 4, 5), List(3, 6, 7), List(2, 8))
List(List(1, 4, 6), List(3, 5, 7), List(2, 8))
List(List(1, 4, 7), List(3, 5, 6), List(2, 8))
List(List(1, 5, 6), List(3, 4, 7), List(2, 8))
List(List(1, 5, 7), List(3, 4, 6), List(2, 8))
List(List(1, 6, 7), List(3, 4, 5), List(2, 8))
List(List(1, 3, 4), List(5, 6, 8), List(2, 7))
List(List(1, 3, 5), List(4, 6, 8), List(2, 7))
List(List(1, 3, 6), List(4, 5, 8), List(2, 7))
List(List(1, 3, 8), List(4, 5, 6), List(2, 7))
List(List(1, 4, 5), List(3, 6, 8), List(2, 7))
List(List(1, 4, 6), List(3, 5, 8), List(2, 7))
List(List(1, 4, 8), List(3, 5, 6), List(2, 7))
List(List(1, 5, 6), List(3, 4, 8), List(2, 7))
List(List(1, 5, 8), List(3, 4, 6), List(2, 7))
List(List(1, 6, 8), List(3, 4, 5), List(2, 7))
List(List(1, 3, 4), List(5, 7, 8), List(2, 6))
List(List(1, 3, 5), List(4, 7, 8), List(2, 6))
List(List(1, 3, 7), List(4, 5, 8), List(2, 6))
List(List(1, 3, 8), List(4, 5, 7), List(2, 6))
List(List(1, 4, 5), List(3, 7, 8), List(2, 6))
List(List(1, 4, 7), List(3, 5, 8), List(2, 6))
List(List(1, 4, 8), List(3, 5, 7), List(2, 6))
List(List(1, 5, 7), List(3, 4, 8), List(2, 6))
List(List(1, 5, 8), List(3, 4, 7), List(2, 6))
List(List(1, 7, 8), List(3, 4, 5), List(2, 6))
List(List(1, 3, 4), List(6, 7, 8), List(2, 5))
List(List(1, 3, 6), List(4, 7, 8), List(2, 5))
List(List(1, 3, 7), List(4, 6, 8), List(2, 5))
List(List(1, 3, 8), List(4, 6, 7), List(2, 5))
List(List(1, 4, 6), List(3, 7, 8), List(2, 5))
List(List(1, 4, 7), List(3, 6, 8), List(2, 5))
List(List(1, 4, 8), List(3, 6, 7), List(2, 5))
List(List(1, 6, 7), List(3, 4, 8), List(2, 5))
List(List(1, 6, 8), List(3, 4, 7), List(2, 5))
List(List(1, 7, 8), List(3, 4, 6), List(2, 5))
List(List(1, 3, 5), List(6, 7, 8), List(2, 4))
List(List(1, 3, 6), List(5, 7, 8), List(2, 4))
List(List(1, 3, 7), List(5, 6, 8), List(2, 4))
List(List(1, 3, 8), List(5, 6, 7), List(2, 4))
List(List(1, 5, 6), List(3, 7, 8), List(2, 4))
List(List(1, 5, 7), List(3, 6, 8), List(2, 4))
List(List(1, 5, 8), List(3, 6, 7), List(2, 4))
List(List(1, 6, 7), List(3, 5, 8), List(2, 4))
List(List(1, 6, 8), List(3, 5, 7), List(2, 4))
List(List(1, 7, 8), List(3, 5, 6), List(2, 4))
List(List(1, 4, 5), List(6, 7, 8), List(2, 3))
List(List(1, 4, 6), List(5, 7, 8), List(2, 3))
List(List(1, 4, 7), List(5, 6, 8), List(2, 3))
List(List(1, 4, 8), List(5, 6, 7), List(2, 3))
List(List(1, 5, 6), List(4, 7, 8), List(2, 3))
List(List(1, 5, 7), List(4, 6, 8), List(2, 3))
List(List(1, 5, 8), List(4, 6, 7), List(2, 3))
List(List(1, 6, 7), List(4, 5, 8), List(2, 3))
List(List(1, 6, 8), List(4, 5, 7), List(2, 3))
List(List(1, 7, 8), List(4, 5, 6), List(2, 3))
List(List(2, 3, 4), List(5, 6, 7), List(1, 8))
List(List(2, 3, 5), List(4, 6, 7), List(1, 8))
List(List(2, 3, 6), List(4, 5, 7), List(1, 8))
List(List(2, 3, 7), List(4, 5, 6), List(1, 8))
List(List(2, 4, 5), List(3, 6, 7), List(1, 8))
List(List(2, 4, 6), List(3, 5, 7), List(1, 8))
List(List(2, 4, 7), List(3, 5, 6), List(1, 8))
List(List(2, 5, 6), List(3, 4, 7), List(1, 8))
List(List(2, 5, 7), List(3, 4, 6), List(1, 8))
List(List(2, 6, 7), List(3, 4, 5), List(1, 8))
List(List(2, 3, 4), List(5, 6, 8), List(1, 7))
List(List(2, 3, 5), List(4, 6, 8), List(1, 7))
List(List(2, 3, 6), List(4, 5, 8), List(1, 7))
List(List(2, 3, 8), List(4, 5, 6), List(1, 7))
List(List(2, 4, 5), List(3, 6, 8), List(1, 7))
List(List(2, 4, 6), List(3, 5, 8), List(1, 7))
List(List(2, 4, 8), List(3, 5, 6), List(1, 7))
List(List(2, 5, 6), List(3, 4, 8), List(1, 7))
List(List(2, 5, 8), List(3, 4, 6), List(1, 7))
List(List(2, 6, 8), List(3, 4, 5), List(1, 7))
List(List(2, 3, 4), List(5, 7, 8), List(1, 6))
List(List(2, 3, 5), List(4, 7, 8), List(1, 6))
List(List(2, 3, 7), List(4, 5, 8), List(1, 6))
List(List(2, 3, 8), List(4, 5, 7), List(1, 6))
List(List(2, 4, 5), List(3, 7, 8), List(1, 6))
List(List(2, 4, 7), List(3, 5, 8), List(1, 6))
List(List(2, 4, 8), List(3, 5, 7), List(1, 6))
List(List(2, 5, 7), List(3, 4, 8), List(1, 6))
List(List(2, 5, 8), List(3, 4, 7), List(1, 6))
List(List(2, 7, 8), List(3, 4, 5), List(1, 6))
List(List(2, 3, 4), List(6, 7, 8), List(1, 5))
List(List(2, 3, 6), List(4, 7, 8), List(1, 5))
List(List(2, 3, 7), List(4, 6, 8), List(1, 5))
List(List(2, 3, 8), List(4, 6, 7), List(1, 5))
List(List(2, 4, 6), List(3, 7, 8), List(1, 5))
List(List(2, 4, 7), List(3, 6, 8), List(1, 5))
List(List(2, 4, 8), List(3, 6, 7), List(1, 5))
List(List(2, 6, 7), List(3, 4, 8), List(1, 5))
List(List(2, 6, 8), List(3, 4, 7), List(1, 5))
List(List(2, 7, 8), List(3, 4, 6), List(1, 5))
List(List(2, 3, 5), List(6, 7, 8), List(1, 4))
List(List(2, 3, 6), List(5, 7, 8), List(1, 4))
List(List(2, 3, 7), List(5, 6, 8), List(1, 4))
List(List(2, 3, 8), List(5, 6, 7), List(1, 4))
List(List(2, 5, 6), List(3, 7, 8), List(1, 4))
List(List(2, 5, 7), List(3, 6, 8), List(1, 4))
List(List(2, 5, 8), List(3, 6, 7), List(1, 4))
List(List(2, 6, 7), List(3, 5, 8), List(1, 4))
List(List(2, 6, 8), List(3, 5, 7), List(1, 4))
List(List(2, 7, 8), List(3, 5, 6), List(1, 4))
List(List(2, 4, 5), List(6, 7, 8), List(1, 3))
List(List(2, 4, 6), List(5, 7, 8), List(1, 3))
List(List(2, 4, 7), List(5, 6, 8), List(1, 3))
List(List(2, 4, 8), List(5, 6, 7), List(1, 3))
List(List(2, 5, 6), List(4, 7, 8), List(1, 3))
List(List(2, 5, 7), List(4, 6, 8), List(1, 3))
List(List(2, 5, 8), List(4, 6, 7), List(1, 3))
List(List(2, 6, 7), List(4, 5, 8), List(1, 3))
List(List(2, 6, 8), List(4, 5, 7), List(1, 3))
List(List(2, 7, 8), List(4, 5, 6), List(1, 3))
List(List(3, 4, 5), List(6, 7, 8), List(1, 2))
List(List(3, 4, 6), List(5, 7, 8), List(1, 2))
List(List(3, 4, 7), List(5, 6, 8), List(1, 2))
List(List(3, 4, 8), List(5, 6, 7), List(1, 2))
List(List(3, 5, 6), List(4, 7, 8), List(1, 2))
List(List(3, 5, 7), List(4, 6, 8), List(1, 2))
List(List(3, 5, 8), List(4, 6, 7), List(1, 2))
List(List(3, 6, 7), List(4, 5, 8), List(1, 2))
List(List(3, 6, 8), List(4, 5, 7), List(1, 2))
List(List(3, 7, 8), List(4, 5, 6), List(1, 2))
scala> List(1,2,3,4).permutations.map(x => x.sliding(2,2).toSet).flatten.map(z => z.sorted).toSet
res24: scala.collection.immutable.Set[List[Int]] = Set(List(3, 4), List(1, 2), List(2, 3), List(1, 4), List(2, 4), List(1, 3))
scala> val resultSet = List(1,2,3,4).permutations.map(x => x.sliding(2,2).toSet).flatten.map(z => z.sorted).toSet.toList
resultSet: List[List[Int]] = List(List(3, 4), List(1, 2), List(2, 3), List(1, 4), List(2, 4), List(1, 3))
scala> resultSet.reverse.sliding(2,2).toList
res1: List[List[List[Int]]] = List(List(List(1, 3), List(2, 4)), List(List(1, 4), List(2, 3)), List(List(1, 2), List(3, 4)))