Solved

has77  challenge

Posted on 2016-08-03
Medium Priority
152 Views
Hi,

I am working on below challenge

http://codingbat.com/prob/p168357

Psedo code description of approach :
1. loop through given array
2. check if an(i th) element and i+1 th adjacent  are 7's or i, i+2 are 7's
3. if yes return true
4.if no return false

I wrote my code as below

``````public boolean has77(int[] nums) {
boolean res=false;

for(int i=0;i<nums.length-2;i++){

if((nums[i]==7&&nums[i+1]==7)||(nums[i]==7&&nums[i+2]==7)){
res=true;
return res;
}
}
return res;
}
``````

I am not passing all tests
Expected      Run
has77([1, 7, 7]) → true      false      X
has77([1, 7, 1, 7]) → true      true      OK
has77([1, 7, 1, 1, 7]) → false      false      OK
has77([7, 7, 1, 1, 7]) → true      true      OK
has77([2, 7, 2, 2, 7, 2]) → false      false      OK
has77([2, 7, 2, 2, 7, 7]) → true      false      X
has77([7, 2, 7, 2, 2, 7]) → true      true      OK
has77([7, 2, 6, 2, 2, 7]) → false      false      OK
has77([7, 7, 7]) → true      true      OK
has77([7, 1, 7]) → true      true      OK
has77([7, 1, 1]) → false      false      OK
has77([1, 2]) → false      false      OK
has77([1, 7]) → false      false      OK
has77([7]) → false      false      OK
other tests
X
How to improve my design, approach, code? please advise
0
Question by:gudii9
• 4
• 3
• 2

LVL 35

Expert Comment

ID: 41742259
You're missing the case where the last two numbers are 7's because you stop the loop too early for the first test to pick up that case.

I could put an extra test in the code to detect it, but you might like to solve that much yourself?
0

LVL 7

Author Comment

ID: 41742443
an extra test in the code to detect it

where and how? i am also trying now
0

LVL 7

Author Comment

ID: 41742451
``````public boolean has77(int[] nums) {
boolean res=false;

for(int i=0;i<nums.length-1;i++){

if((nums[i]==7&&nums[i+1]==7)||(nums[i]==7&&nums[i+2]==7)){
res=true;
return res;
}
}
return res;
}
``````
if i put nums.length-1 in for loop failing tests

Expected      Run
has77([1, 7, 7]) → true      true      OK
has77([1, 7, 1, 7]) → true      true      OK
has77([1, 7, 1, 1, 7]) → false      false      OK
has77([7, 7, 1, 1, 7]) → true      true      OK
has77([2, 7, 2, 2, 7, 2]) → false      Exception:java.lang.ArrayIndexOutOfBoundsException: 6 (line number:6)      X
has77([2, 7, 2, 2, 7, 7]) → true      true      OK
has77([7, 2, 7, 2, 2, 7]) → true      true      OK
has77([7, 2, 6, 2, 2, 7]) → false      false      OK
has77([7, 7, 7]) → true      true      OK
has77([7, 1, 7]) → true      true      OK
has77([7, 1, 1]) → false      false      OK
has77([1, 2]) → false      false      OK
has77([1, 7]) → false      false      OK
has77([7]) → false      false      OK
other tests
OK
Correct for more than half the tests

Your progress graph for this problem

if i say i<nums.length failing more
Expected      Run
has77([1, 7, 7]) → true      true      OK
has77([1, 7, 1, 7]) → true      true      OK
has77([1, 7, 1, 1, 7]) → false      Exception:java.lang.ArrayIndexOutOfBoundsException: 5 (line number:6)      X
has77([7, 7, 1, 1, 7]) → true      true      OK
has77([2, 7, 2, 2, 7, 2]) → false      Exception:java.lang.ArrayIndexOutOfBoundsException: 6 (line number:6)      X
has77([2, 7, 2, 2, 7, 7]) → true      true      OK
has77([7, 2, 7, 2, 2, 7]) → true      true      OK
has77([7, 2, 6, 2, 2, 7]) → false      Exception:java.lang.ArrayIndexOutOfBoundsException: 6 (line number:6)      X
has77([7, 7, 7]) → true      true      OK
has77([7, 1, 7]) → true      true      OK
has77([7, 1, 1]) → false      false      OK
has77([1, 2]) → false      false      OK
has77([1, 7]) → false      Exception:java.lang.ArrayIndexOutOfBoundsException: 2 (line number:6)      X
has77([7]) → false      Exception:java.lang.ArrayIndexOutOfBoundsException: 1 (line number:6)      X
other tests
X
Correct for more than half the tests

Your progress graph for this problem

Forget It! -- delete my code for this problem
Progress graphs:
Your progress graph for this problem

any tips on mastering these edge cases so that i can be right 100% all the time
0

LVL 35

Accepted Solution

Terry Woods earned 1000 total points
ID: 41743384
This is how I would write it to demonstrate cover of the missing case, though it's not necessarily the most efficient way to code it:

``````public boolean has77(int[] nums) {
boolean res=false;

for(int i=0;i<nums.length-2;i++){

if((nums[i]==7&&nums[i+1]==7)||(nums[i+1]==7&&nums[i+2]==7)||(nums[i]==7&&nums[i+2]==7)){
res=true;
return res;
}
}
return res;
}
``````

The middle test is the one I've added.
0

LVL 32

Assisted Solution

awking00 earned 1000 total points
ID: 41744749
To possibly avoid the index out of bounds problem, you might consider starting at index 2 and searching backwards.
0

LVL 7

Author Comment

ID: 41745115
``````public boolean has77(int[] nums) {
boolean res = false;

for (int i = 0; i < nums.length - 2; i++) {

if ((nums[i] == 7 && nums[i + 1] == 7) || (nums[i] == 7 && nums[i + 2] == 7)
|| ((nums[i + 1]) == 7 && (nums[i + 2] == 7))) {

res = true;
return res;
}
}
return res;
}
``````

above passed all tests. one lesson i should take to myself is analyzing failing tests in this case {1,7,7} so i have to handle i+1 and i+2 case as well as above
0

LVL 7

Author Comment

ID: 41745116
To possibly avoid the index out of bounds problem, you might consider starting at index 2 and searching backwards.

what do you mean by searching backwards?
can you please elaborate on that?
0

LVL 32

Expert Comment

ID: 41747231
>>what do you mean by searching backwards?
can you please elaborate on that?
<<
You wrote -
>>for(int i=0;i<nums.length-1;i++){
if((nums[i]==7&&nums[i+1]==7)||(nums[i]==7&&nums[i+2]==7)){
res=true;<<
which caused ([2, 7, 2, 2, 7, 2]) to fail with indexOutOfBounds exception
because i is going from 0 to 5 so when it looks for a value at i + 2 when i = 4 or i + 1 when i = 5, there is no such index for that array.
However, if you increment i from 2 to 5 and first search for index 2 == 7 and (index 2-1 == 7 or index 2-2 == 7) up to index 5 == 7 and (index 5-1 == 7 or index 5-2 == 7), you will always be evaluating a valid index
0

LVL 32

Expert Comment

ID: 41747234
Needed to add another condition - where (index - 2 == 7 and index - 1 == 7)
0

Featured Post

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment Already a member? Login.

In real business world data are crucial and sometimes data are shared among different information systems. Hence, an agreeable file transfer protocol need to be established.
A solution for Fortify Path Manipulation.
The viewer will learn how to use the return statement in functions in C++. The video will also teach the user how to pass data to a function and have the function return data back for further processing.
The viewer will learn how to user default arguments when defining functions. This method of defining functions will be contrasted with the non-default-argument of defining functions.
Suggested Courses
Course of the Month6 days, 18 hours left to enroll

590 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.