+16

How to read and analyze other's code?

Is it an important ability to analyze other's creations? What kind of stuff is going on? Because, I'm solving an assignment named as Adjacent Clone Letters and I'm able to fill the matrix with random letters but I don't know how to check for the clones? I checked out others code as well but yeah, while analyzing others code, I realized one that I just don't know how to analyze all the stuff going there!!! I don't know how it is working! And I was feeling like a stupid as the solution is in my hand but I'm unable to solve the problem. I can tell you, this kind of feeling is not good!!!! My confidence is going down whenever I see that I haven't solve that assignment!!! Please guide!! Basically, I have two questions to ask: - 1. Is to analyze others code is an important ability in programming? 2. What is the logic to solve that assignment? https://code.sololearn.com/c8zW4D40Ucyg/?ref=app https://www.sololearn.com/learn/4682/?ref=app

3/20/2019 4:02:51 AM

Ayush Sinha

16 Answers

New Answer

+12

The feeling isn't that good indeed...just have a collection of what stumbles you, then break them down into mini problems, solve each one at a time and eventually the whole concept will make sense. Infact never stop reviewing because when such thing happens and you work around it, that's when you become even good at it.

+9

Ayush Sinha For me it is hard to read a code if the coder uses non-english variable names. And I have problems when all is written together (without blank lines). I think the ability to analize other code is important but I know that it is not easy and need a lot of experience. Assignment: Lets take an example: A B D A C D C A B How many different letters are used? 4 A, B, C, D I solved it with a HashMap: key = letter, value = clone A hashmap don't add duplicates. So I got this map: [A=0, B=0, C=0, D=0] Now check the matrix line per line: check the neighbors of your current letter: up, down, left, right, bottom left, bottom right, upper left, upper right. Matrix[x][y] - positions: down: x+1, y (x+1 < matrix.length) up: x-1,y (x-1 >= 0) left: x, y-1 (y-1 >= 0) right: x, y+1 (y+1 < matrix[x].length) upper left: x-1, y-1 upper right: x-1, y+1 bottom left: x+1, y-1 bottom right: x+1, y+1 loop through your matrix: matrix[0][0] = A left: nothing right: B down: A --> clone found

+7

Dan Rhamba, the feeling of being bored is also a thing which is a problem with me! Do you have any suggestion on that?

+7

Ayush Sinha This is what I do when I feel bored... from my videos collection or YouTube videos I watch those ones that demonstrate some programming skills. I can't tell how but watching someone explaining some concepts gets me motivated again...

+6

Denise Roßberg, Now check the matrix line per line: check the neighbors of your current letter: up, down, left, right, bottom left, bottom right, upper left, upper right. Matrix[x][y] - positions: down: x+1, y (x+1 < matrix.length) up: x-1,y (x-1 >= 0) left: x, y-1 (y-1 >= 0) right: x, y+1 (y+1 < matrix[x].length) upper left: x-1, y-1 upper right: x-1, y+1 bottom left: x+1, y-1 bottom right: x+1, y+1 loop through your matrix: matrix[0][0] = A left: nothing right: B down: A --> clone found Can you explain it more deeply please!!!!! 😊

+5

Ayush Sinha If you have access to desktop or laptop then learn to use debugger for understanding what's going on in the code. If you can't use a debugger like here at sololearn the the tried and tested method that works (but lengthy) is print the values of the variables at various steps like before modifying and after modifying etc.

+5

Part two: I have a method for checking all neighbors which returns true if two neighbors are the same. If a clone is found, I add the letter and increment the value of this letter: [A=1, B=0, C=0] Second letter is B: no clone found. Third letter D ([0][3] = [1][3] --> clone found, add D and increment value of D) [A=1, B=0, C=0, D=1] Next line: A [1][0] = [0][0] --> clone found And so on. HashMap after the loop: [A=3, B=0, C=2, D=2] I hope it helps you a little bit. https://code.sololearn.com/cy5oNTefTXIb/?ref=app

+5

Reading other people's code can be a lot harder than reading your own, especially when it doesn't have enough comments or contains badly named variables etc. This may apply to your own code that you revisit months later as well. If any non-trivial code of others is not well documented/commented as to the algorithm used, for example, it can be a real struggle to analyse. Often you need a lot of patience and effort to analyse it. Remember to include useful and pertinent comments in your code and we can only hope that others would do the same. Sometimes for larger pieces of code, debuggers and software which generates call-graphs may help you. For larger programs, debugger and software that generates call graphs may help you.

+5

https://code.sololearn.com/ciV82WjqlnQD/?ref=app If you run the code you will see a matrix and the positions of each letter. I think it makes clear how I found down/up/left/right positions. Matrix[i][j]: left/right i-1/i+1 up/down j-1/j+1 And I think it is clear that your matrix has borders: i-1 and j-1 >= 0 i+1 < matrix.length j+1 < matrix[i].length Imagine a nested for loop to get all letters and inside it a method: public boolean checkNeighbor(int i, int j){ //left if(j - 1 >= 0 && matrix[i][j] == matrix[i][j-1] ){ return true; //right if(j + 1 < matrix[i].length && matrix[i][j] == matrix[i][j+1]){ return true //do it for all neighbor positions return false //no clone found } For(int i = 0; i < matrix.length; i++){ For(int j = 0; j < matrix[i].length; j++){ If(checkNeighbor(i,j) == true){ //see my last post with the hashmap //get the value of matrix[i][j] in the hashMap --> value++ }//end if }//end for But I don't know how to find a solution without using a HashMap ;) Maybe you need two arrays.

+5

i find the following helpful when analysing others code. 1) print a physical copy of the code. there is nothing better than physical manipulation. 2) mark the printout by labelling the functions and numbering them. 3) you must now understand the code in two ways. firstly, you should understand how each function works. secondly, understand how each function relates to other functions. this is called within elaboration and between elaboration (craik and lockhart 1975). if you want a visual way of representing information then it is recommended that you understand how to use tools like psudo code, flowcharts and uml

+5

Patricia Collier Don't post personal information here https://www.sololearn.com/discuss/1316935/?ref=app

+3

That is a great question! I started programming when the company's programmer gave me the Business BASIC language reference for the Data General Nova Architecture minicomputer that ran their applications. Having the language reference handy to look up what the code does is key. Writing your own code snippets and seeing what the code does helps. It's painful at the start, but if you keep at it you will get it. Back when I started there was no community like SoloLearn, so keep asking questions and continue the journey 🤓

+2

I would use Frida or Ghidra(NSA just released this) Which are decompilers (or fuzzers) to basically run hooks and scripts that act like a logCat for the apps they are used upon. .....you see what functions and methods are in play and their values and then you can use python or java to CHANGE (hack) the values and change or fix or experiment (mostly hack or ostensibly hunt down malware) So you see a password function that is encrypted and decide to make the value of the password 0...or 1234 You just defeated the password. Just an example. But also.....you can closely watch your on apps as they execute and trace everything which can be very helpful In debugging your work.

+2

I feel your frustration. While I can't help you solve your situation. You have demonstrated the importance of using descriptive function names and variables as well as comments while developing code. This is particularly important for a learning experience that will engage the student and allow the student to succeed. In this course I have seen questions that rely on knowledge that has not been imparted in order for the question to be answered correctly only to have that information explained in a later lesson. That can be very discouraging to the student. I can answer your first question. Yes. Analyze code when you can. You can gain knowledge, techniques and further your own skill set by observing how another solved a given task.

+2

Here on Sololearn you have the advantage that you can ask the people personally if you don't understand a solution. If you try on your own... well, I would try to follow the program step by step, keeping track of the values and how they change over the course of the program on paper, maybe visualising it with a draft. Of course it helps if the code is readably written and commented. I tried to comment my own attempt understandably... wanna give it a try? (And as I said, you can ask.) https://code.sololearn.com/c30wK7XUZeo3/?ref=app

0

I want to get my phone rooted, I have the kingroot apk and the purify app, and I got the bootloader unlocked. <redacted> Patricia Collier, please refrain from posting contact information here, it may be unsafe.