Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
26
Task/Power-set/Kotlin/power-set.kotlin
Normal file
26
Task/Power-set/Kotlin/power-set.kotlin
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
// purely functional & lazy version, leveraging recursion and Sequences (a.k.a. streams)
|
||||
fun <T> Set<T>.subsets(): Sequence<Set<T>> =
|
||||
when (size) {
|
||||
0 -> sequenceOf(emptySet())
|
||||
else -> {
|
||||
val head = first()
|
||||
val tail = this - head
|
||||
tail.subsets() + tail.subsets().map { setOf(head) + it }
|
||||
}
|
||||
}
|
||||
|
||||
// if recursion is an issue, you may change it this way:
|
||||
|
||||
fun <T> Set<T>.subsets(): Sequence<Set<T>> = sequence {
|
||||
when (size) {
|
||||
0 -> yield(emptySet<T>())
|
||||
else -> {
|
||||
val head = first()
|
||||
val tail = this@subsets - head
|
||||
yieldAll(tail.subsets())
|
||||
for (subset in tail.subsets()) {
|
||||
yield(setOf(head) + subset)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue