Solved

int in the range of 30 to 50 challenge

Posted on 2014-10-08
19
176 Views
Last Modified: 2014-10-09
Hi,

I was working on the int in the range of 30 to 50 challenge


http://codingbat.com/prob/p132134


I wrote code like below
public boolean in3050(int a, int b) {

if((Math.abs(a-30)>=10 &&Math.abs(b-30)>=10)  || (Math.abs(a-40)>=10&& Math.abs(b-40)>=10))
{
return true;
}

if((Math.abs(a-40)>=10 && Math.abs(b-40)>=10) || (Math.abs(a-50)>=10 && Math.abs(b-50)>=10))
{
return true;
}
  return false;
}

Open in new window

I have couple of test cases failing as below

Expected      Run            
in3050(30, 31) → true      true      OK         
in3050(30, 41) → false      false      OK         
in3050(40, 50) → true      true      OK         
in3050(40, 51) → false      true      X         
in3050(39, 50) → false      false      OK         
in3050(50, 39) → false      false      OK         
in3050(40, 39) → true      true      OK         
in3050(49, 48) → true      true      OK         
in3050(50, 40) → true      true      OK         
in3050(50, 51) → false      true      X         
in3050(35, 36) → true      true      OK         
in3050(35, 45) → false      false      OK         
Correct for more than half the tests


How to fix and improve my program. 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
  • 8
  • 7
  • 2
  • +1
19 Comments
 
LVL 84

Accepted Solution

by:
ozo earned 300 total points
ID: 40368987
Look at how your code is handling the not OK cases, and see if you can figure out why it is getting the wrong answer.

You may also want to think about how you are doing the range 30..40 inclusive and range 40..50 inclusive tests
0
 
LVL 7

Author Comment

by:gudii9
ID: 40368999
public boolean in3050(int a, int b) {

if((Math.abs(a-30)>=10 &&Math.abs(b-30)>=10)  || (Math.abs(a-40)>=10&& Math.abs(b-40)>=10))
{
return true;
}

if((Math.abs(a-40)>=10 && Math.abs(b-40)>=10) || (Math.abs(a-50)>=10 && Math.abs(b-50)>=10))
{
return true;
}

if((a-50)>=1 && (b-50)>=1)
{
return false;
}
return false;

}

Open in new window


I think i improved my code bit still 2 failing

Expected      Run            
in3050(30, 31) → true      true      OK         
in3050(30, 41) → false      false      OK         
in3050(40, 50) → true      true      OK         
in3050(40, 51) → false      true      X         
in3050(39, 50) → false      false      OK         
in3050(50, 39) → false      false      OK         
in3050(40, 39) → true      true      OK         
in3050(49, 48) → true      true      OK         
in3050(50, 40) → true      true      OK         
in3050(50, 51) → false      true      X         
in3050(35, 36) → true      true      OK         
in3050(35, 45) → false      false      OK
0
 
LVL 84

Expert Comment

by:ozo
ID: 40369006
Think more carefully about what in the range 30..40 inclusive means, and what Math.abs(a-30)>=10 means
0
Guide to Performance: Optimization & Monitoring

Nowadays, monitoring is a mixture of tools, systems, and codes—making it a very complex process. And with this complexity, comes variables for failure. Get DZone’s new Guide to Performance to learn how to proactively find these variables and solve them before a disruption occurs.

 
LVL 27

Assisted Solution

by:dpearson
dpearson earned 200 total points
ID: 40369068
Along the same lines as ozo is saying,

What does:

Math.abs(a-30)>=10

return for "a = 25"?

And is this what you want?

Doug
0
 
LVL 7

Author Comment

by:gudii9
ID: 40369099
thinking. Why thinking is takes time. why it is not spontaneous yet with java language unlike english language?
0
 
LVL 7

Author Comment

by:gudii9
ID: 40369102
in the mind i have answer but to teach computer to understand is bit hard for me
0
 
LVL 27

Expert Comment

by:dpearson
ID: 40369110
Don't worry that it takes time.  It will all get faster with practice.

Everyone is slow when they start out.

Doug
0
 
LVL 7

Author Comment

by:gudii9
ID: 40369822
public class Test9 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		in3050(40,51);
	}

	
	public static boolean in3050(int a, int b) {

		if((Math.abs(a-30)<=10 &&Math.abs(b-30)<=10)  || (Math.abs(a-40)<=10&& Math.abs(b-40)<=10))
		{
		return true;
		}

		if((Math.abs(a-40)<=10 && Math.abs(b-40)<=10) || (Math.abs(a-50)<=10 && Math.abs(b-50)<=10))
		{
		return true;
		}

		if((a-50)>0 && (b-50)>0)
		{
		return false;
		}
		return false;

		}
}

Open in new window


tried as above but still not working. WIll modify more
0
 
LVL 84

Expert Comment

by:ozo
ID: 40369835
Think more carefully about what in the range 30..40 inclusive means, and what Math.abs(a-40)<=10 means
Think about what happens when a is 29, 30, 31, 39, 40, 41

Another hint:  How would you test for in the range -10..10?
0
 
LVL 37

Expert Comment

by:zzynx
ID: 40370144
>> why it is not spontaneous yet with java language unlike english language?
I think that's because you use the method Math.abs()
I wonder why you use it for this challenge?

Let's do it in English:
Checking if an int x is in the range 30...40 is just as simple as
1) checking that x is 30 or more
but ALSO
2) checking that x is no more than 40, thus 40 or less

In java
1) x >= 30
AND
2) x <= 40

Hence, checking if an int x is in the range 30...40 is just as simple as:

if ( x>=30 && x<=40) {
}

You have to check if both a and b are in the range 30..40, so that just doubling what you already had above:
if ( (a>=30 && a<=40) && (b>=30 && b<=40) ) {
}

And you have to check it for another range: 40...50, so that's replacing 30 by 40 and 40 by 50:
if ( (a>=40 && a<=50) && (b>=40 && b<=50) ) {
}

So the eventual result is:

public boolean in3050(int a, int b) {
      if ( (a>=30 && a<=40) && (b>=30 && b<=40) ) { // a and b in the range 30...40?
         return true; // Yes!
      }

      if ( (a>=40 && a<=50) && (b>=40 && b<=50) ) { // a and b in the range 40...50?
         return true; // Yes!
      }

      return false; // no succes (otherwhise, we shouldn't have come till here)
}

Open in new window

0
 
LVL 7

Author Comment

by:gudii9
ID: 40370836
Above solution works great.. in my mind i was struck with one direction of Math.abs for this challenge. How to keep mind working  thinking on all different directions and possibilities.
0
 
LVL 84

Expert Comment

by:ozo
ID: 40370843
For what range of numbers  is Math.abs(a-40)<=10 true?
0
 
LVL 7

Author Comment

by:gudii9
ID: 40371117
both sides of 40 ie 30-50 since -10 also considered as 10 with abs
0
 
LVL 84

Expert Comment

by:ozo
ID: 40371128
Yes.  So can you see how to modify 30-50 to 30-40?
0
 
LVL 7

Author Comment

by:gudii9
ID: 40371137
public class Test8 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
    boolean b=in3050(30, 51);
    System.out.println("b is-->"+b);
	}

	
	public static boolean in3050(int a, int b) {
	      if ( a>=30 && a<=40 && b>=30 && b<=40 ) { // a and b in the range 30...40?
	         return true; // Yes!
	      }

	      if ( a>=40 && a<=50 && b>=40 && b<=50 ) { // a and b in the range 40...50?
	         return true; // Yes!
	      }

	      return false; // no succes (otherwhise, we shouldn't have come till here)
	}
}

Open in new window


Even if i remove the inner brackets I still get same results.

Instead of

  if ( (a>=30 && a<=40) &&( b>=30 && b<=40) )
changed as below

  if ( a>=30 && a<=40 && b>=30 && b<=40 )

So no need of inner extra brackets right?
Please advise
0
 
LVL 84

Expert Comment

by:ozo
ID: 40371185
In java, comparisons have precedence over boolean operators,

but I was asking whether you could figure out if
30-50 corresponds to Math.abs(a-40)<=10
then
30-40 corresponds to what?
0
 
LVL 7

Author Comment

by:gudii9
ID: 40371200
(a-35)<=5
which adds 5 on both sides of 35
0
 
LVL 84

Expert Comment

by:ozo
ID: 40371238
Correct, Math.abs(a-35)<=5 would test for the range 30..40
0
 
LVL 37

Expert Comment

by:zzynx
ID: 40372346
>> Above solution works great..
Then why didn't you give it any points?
0

Featured Post

Free Tool: SSL Checker

Scans your site and returns information about your SSL implementation and certificate. Helpful for debugging and validating your SSL configuration.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
web application structure 18 128
Setup GlassFish 4 53
dao vs facade design patterns 2 66
convert Absolute path to relative path of FTP location 7 47
Java functions are among the best things for programmers to work with as Java sites can be very easy to read and prepare. Java especially simplifies many processes in the coding industry as it helps integrate many forms of technology and different d…
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 clear a vector as well as how to detect empty vectors in C++.
In a recent question (https://www.experts-exchange.com/questions/29004105/Run-AutoHotkey-script-directly-from-Notepad.html) here at Experts Exchange, a member asked how to run an AutoHotkey script (.AHK) directly from Notepad++ (aka NPP). This video…
Suggested Courses

738 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