import kotlin.random.Random
import kotlin.math.pow // Needed for Double.pow
// Helper extension function for integer power
// Uses Double.pow under the hood, then converts back to Int
fun Int.pow(exp: Int): Int {
return this.toDouble().pow(exp).toInt()
}
// Generates N random integers, each with distinct digits and exact length L
fun generateDistinctDigitNumbers(N: Int, L: Int): List<Int> {
require(L > 0) { "Length L must be positive" }
val results = mutableSetOf<Int>() // Use a set to avoid duplicate numbers
// Lower bound: smallest L-digit number (e.g., L=3 -> 100)
val lower = 10.pow(L - 1)
// Upper bound: first number with more than L digits (exclusive) (e.g., L=3 -> 1000)
val upper = 10.pow(L)
while (results.size < N) {
// Generate a random L-digit number
val number = Random.nextInt(from = lower, until = upper)
// Convert number to string to check digit uniqueness
val digits = number.toString()
// Check if all digits are distinct
if (digits.toSet().size == digits.length) {
results.add(number)
}
}
return results.toList()
}
fun main() {
val numbers = generateDistinctDigitNumbers(N = 10, L = 6)
println(numbers)
}
/*
run:
[287530, 197486, 218549, 420617, 563189, 418709, 125406, 725069, 169482, 529764]
*/