learned

powerset

fun <T> Collection<T>.powerset(): Set<Set<T>> = powerset(this, setOf(setOf()))

private tailrec fun <T> powerset(left: Collection<T>, acc: Set<Set<T>>): Set<Set<T>> = when {
    left.isEmpty() -> acc
    else ->powerset(left.drop(1), acc + acc.map { it + left.first() })
}

fun main() {

    val list1 = listOf<Int>(1,2,3,4,5,6,7,8)
    val list2 = listOf<Int>(1,2,3)
 
	val a = list1.powerset()
    println(a)
    println(a.size)

	val b = list2.powerset()
    println(b)
}

github.com/MarcinMoskala/KotlinDiscreteMathToolkit/blob/master/src/main/java/com/marcinmoskala/math/PowersetExt.kt

 

MarcinMoskala/KotlinDiscreteMathToolkit

Set of extensions for Kotlin that provides Discrete math functionalities - MarcinMoskala/KotlinDiscreteMathToolkit

github.com