Algorithm Scala:如何以各种可能的方式将列表拆分为元组

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

我们有一个仓库,每个产品放在一个地方。每个订单包含一套产品。仓库工人有一个手推车,可以存放N份订单。 对于订单列表,请找到解决该列表的所有可能解决方案

(我正在寻找一种算法,可以将列表拆分为元组,元组或元素的顺序无关紧要。)

此处举例说明了一台手推车最多可订购2个订单(N=2)

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)))