0
How can realized this?
There is two-dimensional matrix 10x10, with random values from 0 to 9. How to find the indices of the elements, the value of which: 1) is greater than the sum of all neighbors (vertically and horizontally) 2) occurs no more than once in a column and in a line at the same time. Code for example (local compiler not start this code): fun main(){ val matrix = Array(10) { IntArray(10) } val rand = Random() val result = mutableListOf<Pair<Int, Int»() for (i in matrix.indices) { for (j in matrix[i].indices) { matrix[i][j] = rand.nextInt(10) if (matrix[i][j] > 7){ result.add(Pair(i,j)) } } } for (i in 0..9) { for (j in 0..9) print(matrix[i][j].toString() + "\t") println() } println(result) }
10 Antworten
+ 2
first advice: better indent your code, and share a code playground project link rather than copy-paste it ^^
so, local compiler as well as any compiler would not start your code because of errors ^^
you try to use Random, wich need to be imported: I don't know why, but trying to import package kotlin.random fail in app but success in web :o
however, you could use Math.random for your use case ;P
also, you cannot call an abstract class, so your rand initialization must not have parenthesis after Random...
on next line, you use a special char instead of double closing angular brackets (">>").
once both syntax error corrected, your code run, despite logical mistakes: instead of following requirements, you fill your result with matrix element indices where value is greater than 7 ;P
here's a solution I wrote for you:
https://code.sololearn.com/cUbolZdo4rxN/?ref=app
... assuming that "neighbors" are not cyclic (ie: cell [9,9] has only two neighbors instead of four if we consider [9,0] and [0,9]
+ 1
visph
It's the best solution, thank a lot! I took note of all your comments. But, if you have time, could you explain how your code works, in detail if possible, you can in a personal. Thanks again!
+ 1
in deep details that may be too long for a post (and I don't have pm as I use a quite old version of sololearn app ;P)...
anyway in short:
populate and output the matrix with random values (use of same nested loops to do both at once)
once matrix populated use another nested loops to check if element is greater than sum of neighbors,
if so, loop over its row and column to check if another same value is present... set a flag to false (initialized to true) if so
always if first check is right, when second check loop is over and flag remain true, then append indices pair to result.
feel free to ask for details on specific parts ;)
+ 1
visph Good answer, thank you!
But what is "var f = true" and in the other line "var f = false"?!
+ 1
that's the flag (f for flag ^^) to keep track of duplicate in row/column check result: if true there's no duplicate (initial value), else set to false ^^
+ 1
visph oh, i understand, thanks) it's very informative 🤓
+ 1
visph could you help me please again?!
https://code.sololearn.com/cwh5pmkd1YU3/?ref=app
+ 1
you've got empty result because you never add values to it ;)
if you want to log only the first check as I guess you're trying to do, leave only the 'res.add(Pair(i,j))' from the part you've commented (either just after or just before it)
+ 1
visph yeap, thank you)
0
visph
Thank a lot! I try to use it and understand how it works! Thank you for your informative answer!