The challenge
Create an NxN multiplication table, of size provided in parameter.
for example, when given size
is 3:
1 2 3
2 4 6
3 6 9
for given example, the return value should be: [[1,2,3],[2,4,6],[3,6,9]]
The solution in Kotlin
Option 1:
package solution
object Solution {
fun multiplicationTable(size: Int) = Array<IntArray>(size) {
i -> (1..size).map { it * (i + 1) }.toIntArray()
}
}
Option 2:
package solution
object Solution {
fun multiplicationTable(size: Int): Array<IntArray> {
return Array(size){i -> IntArray(size){(it + 1) * (i + 1)}}
}
}
Option 3:
package solution
object Solution {
fun multiplicationTable(size: Int): Array<IntArray> =
(1..size)
.map { outer ->
(1..size).map {
inner -> outer * inner
}.toIntArray()
}.toTypedArray()
}
Test cases to validate our solution
package solution
import org.junit.Test
import kotlin.test.assertTrue
class ExampleTests {
private fun Array<IntArray>.stringify(): String = "[\n" + Array(this.size,{ " [ " + this[it].map { n -> n.toString() }.joinToString(", ") + " ]" }).joinToString("\n") + "\n]"
@Test fun `Basic Test`() {
val size = 3
val user = Solution.multiplicationTable(size)
val sol = arrayOf(
intArrayOf(1,2,3),
intArrayOf(2,4,6),
intArrayOf(3,6,9)
)
assertTrue(user.contentDeepEquals(sol), "Expected:\n${sol.stringify()}\nGot:\n${user.stringify()}")
}
}