/*
Find the N smallest values in a 2D array.
Approach:
1. Flatten the 2D array into a single list.
2. Sort the list.
3. Take the first N values.
Kotlin's standard library provides expressive and efficient
operations for transforming and selecting data.
*/
// Flatten a 2D array into a 1D list
fun flatten(matrix: Array<IntArray>): List<Int> {
// matrix.flatMap works because the array is only 2 levels deep
return matrix.flatMap { row -> row.toList() }
}
// Extract the N smallest values
fun smallestN(matrix: Array<IntArray>, n: Int): List<Int> {
val flat: List<Int> = flatten(matrix)
// Sort ascending
val sorted: List<Int> = flat.sorted()
// Return the first N values
return sorted.take(n)
}
fun main() {
val matrix: Array<IntArray> = arrayOf(
intArrayOf(42, 12, 85, 3),
intArrayOf(7, 99, 15, 23),
intArrayOf(64, 1, 18, 30),
intArrayOf(3, 55, 11, 90)
)
val n: Int = 5
val values: List<Int> = smallestN(matrix, n)
println("The $n smallest values:")
println(values.joinToString(" "))
}
/*
run:
The 5 smallest values:
1 3 3 7 11
*/