Skip to content

Instantly share code, notes, and snippets.

@blancosj
Last active January 4, 2017 18:30
Show Gist options
  • Save blancosj/c7f3018e982d56d7a610e2c657191d92 to your computer and use it in GitHub Desktop.
Save blancosj/c7f3018e982d56d7a610e2c657191d92 to your computer and use it in GitHub Desktop.
def permutator[T](list: List[T]): List[List[T]] = {
def _p(total: Int, list: List[T]): List[List[T]] = {
if (total == 0) {
list.map(List(_))
} else {
for (i <- list;
j <- _p(total - 1, list))
yield { i :: j }
}
}
_p(list.length - 1, list)
}
val list = (1 to 3).toList
permutator(list).foreach(println)
val list2 = List("A", "B", "C")
permutator(list2).foreach(println)
// Output
// list: List[Int] = List(1, 2, 3)
// List(1, 1, 1)
// List(1, 1, 2)
// List(1, 1, 3)
// List(1, 2, 1)
// List(1, 2, 2)
// List(1, 2, 3)
// List(1, 3, 1)
// List(1, 3, 2)
// List(1, 3, 3)
// List(2, 1, 1)
// List(2, 1, 2)
// List(2, 1, 3)
// List(2, 2, 1)
// List(2, 2, 2)
// List(2, 2, 3)
// List(2, 3, 1)
// List(2, 3, 2)
// List(2, 3, 3)
// List(3, 1, 1)
// List(3, 1, 2)
// List(3, 1, 3)
// List(3, 2, 1)
// List(3, 2, 2)
// List(3, 2, 3)
// List(3, 3, 1)
// List(3, 3, 2)
// List(3, 3, 3)
// res0: Unit = ()
// list2: List[String] = List(A, B, C)
// List(A, A, A)
// List(A, A, B)
// List(A, A, C)
// List(A, B, A)
// List(A, B, B)
// List(A, B, C)
// List(A, C, A)
// List(A, C, B)
// List(A, C, C)
// List(B, A, A)
// List(B, A, B)
// List(B, A, C)
// List(B, B, A)
// List(B, B, B)
// List(B, B, C)
// List(B, C, A)
// List(B, C, B)
// List(B, C, C)
// List(C, A, A)
// List(C, A, B)
// List(C, A, C)
// List(C, B, A)
// List(C, B, B)
// List(C, B, C)
// List(C, C, A)
// List(C, C, B)
// List(C, C, C)
// res1: Unit = ()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment