28 lines
709 B
Kotlin
28 lines
709 B
Kotlin
import java.util.LinkedList
|
|
|
|
inline fun <reified T> combinations(arr: Array<T>, m: Int) = sequence {
|
|
val n = arr.size
|
|
val result = Array(m) { arr[0] }
|
|
val stack = LinkedList<Int>()
|
|
stack.push(0)
|
|
while (stack.isNotEmpty()) {
|
|
var resIndex = stack.size - 1;
|
|
var arrIndex = stack.pop()
|
|
|
|
while (arrIndex < n) {
|
|
result[resIndex++] = arr[arrIndex++]
|
|
stack.push(arrIndex)
|
|
|
|
if (resIndex == m) {
|
|
yield(result.toList())
|
|
break
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
fun main() {
|
|
val n = 5
|
|
val m = 3
|
|
combinations((1..n).toList().toTypedArray(), m).forEach { println(it.joinToString(separator = " ")) }
|
|
}
|