?
Solved

has77  challenge

Posted on 2016-08-03
9
Medium Priority
?
120 Views
Last Modified: 2016-08-08
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;
}

Open in new window




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
Comment
Question by:gudii9
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 4
  • 3
  • 2
9 Comments
 
LVL 35

Expert Comment

by:Terry Woods
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

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

where and how? i am also trying now
0
 
LVL 7

Author Comment

by:gudii9
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;
}

Open in new window

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
Setting up LaraDock for Laravel

Learn how to set up LaraDock in a Laravel project - LaraDock gives us an easy way to run a Laravel application using Docker in a single command.

 
LVL 35

Accepted Solution

by:
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;
}

Open in new window


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

Assisted Solution

by:awking00
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

by:gudii9
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;
	}

Open in new window



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

by:gudii9
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

by:awking00
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

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

Featured Post

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

When we want to run, execute or repeat a statement multiple times, a loop is necessary. This article covers the two types of loops in Python: the while loop and the for loop.
International Data Corporation (IDC) prognosticates that before the current the year gets over disbursing on IT framework products to be sent in cloud environs will be $37.1B.
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.
Introduction to Processes
Suggested Courses

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

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

Join & Ask a Question