I’ve mentioned many time on this blog how I am a big fan of codecademy. I think this is an excellent way to develop some coding skills in a simple hand-held way. I’ve been following the javascript track for some time and really enjoy it. Recently, Ruby and Python tracks have been introduced, although I have only given each one minimal attention so far. In the future, I am hoping to concentrate on the web programming elements in order to provide some context for the javascript work.
Presently, I have been stuck on a problem that should be easy, but the walkthrough does not seem to guide you in the right direction. The problem is intended to take a string of text and search for your name within this text. I think the difficulty arises from the fact that the walkthrough sounds like you should be solving the whole problem, but may actually be asking for less.
Below, with a few extra details, I present a solution that effectively gets the job done. I’ve included some documentation so you can see what I was thinking as well as some debugging aids to visualize what the program is doing at each step. This solution will get a ‘pass’ for the problem, but I am wondering how this might be simplified.
If you can simplify this solution, please leave a comment and I will update the code if significant advances are made.
/*jshint multistr:true */
var text = “hdajkslhgjalhjghjklhjackfghjdskghjkdfajlk”; //the text we search through
var myName = “jack”; //what we are looking for
var hits = []; //array storing match
var j=0; //a counter for myName array/////////first loop for match with myName[0]////////////
for (i=0;i< text.length;i++){
console.log(i); // enumerates position in text array
if (text[i] === myName[j]){//////advances position in myName array, second loop continues search/////
for(var j=i;j<i +myName.length;j++){
console.log(“testing if”,text[j],” = “,myName[j-i]); //shows match test
if(text[j] != myName[j-i]){
hits.length = 0; //if no match, hits array is cleared
j=0; //array position in myName is reset
break; //exits inner loop
} //end ‘if no match’if (text[j] === myName[j-i]){ //for each match, letter is pushed
hits.push(text[j]); //onto hits array
} //end ‘if match’
} //end inner loop/////if reach size of myName array ////////
if (hits.length === myName.length){
console.log(“we found your name: “, hits); //output match
break;
} //end ‘size of array
}//end outer loop
}//end program
/* output
0
1
2
3
testing if j = j
testing if k = a
4
5
6
7
8
9
testing if j = j
testing if a = a
testing if l = c
10
11
12
13
testing if j = j
testing if g = a
14
15
16
testing if j = j
testing if k = a
17
18
19
20
testing if j = j
testing if a = a
testing if c = c
testing if k = k
we found your name: [ ‘j’, ‘a’, ‘c’, ‘k’ ]
*/