loading...

Daily Challenge #133 - Suitcase Packing

thepracticaldev profile image dev.to staff ・1 min read

Mr. Square is going on holiday. He wants to bring 2 of his favorite squares with him, so he put them in his rectangle suitcase.

Write a function that, given the size of the squares and the suitcase, return whether the squares can fit inside the suitcase.

fit_in(a,b,m,n)
a,b are the sizes of the squares
m,n are the sizes of the suitcase

Example
fit_in(1,2,3,2) should return True
fit_in(1,2,2,1) should return False
fit_in(3,2,3,2) should return False
fit_in(1,2,1,2) should return False


This challenge comes from SADragonMaker on CodeWars. Thank you to CodeWars, who has licensed redistribution of this challenge under the 2-Clause BSD License!

Want to propose a challenge idea for a future post? Email yo+challenge@dev.to with your suggestions!

Posted on by:

thepracticaldev profile

dev.to staff

@thepracticaldev

The hardworking team behind dev.to ❤️

Discussion

pic
Editor guide
 

The long side is the obvious case, but what if

  • Square A: 1x1
  • Square B: 2x2
  • Rectangle 3x1

=> FitIn(1,2,3,1)?

in C#

public bool FitIn(int a, int b, int m, int n)
{
   //both squares (added) must fit into the long side of the rectangle AND
   //the bigger single square must fit into the short side of the rectangle

   int longSide = Math.Max(m,n);
   int shortSide = Math.Min(m,n);
   int addedSquareLengths = a + b;
   int biggerSingleSquareSize = Math.Max(a,b);

   //do they fit?
   bool fitsLong = addedSquareLengths <= longSide;
   bool fitsShort = biggerSingleSquareSize <= shortSide;

   return fitsLong && fitsShort;
}

I know, it's a bit verbose, but very self explanatory. A short version will look like this:

public bool FitIn(int a, int b, int m, int n) =>
   (a + b <= Math.Max(m,n)) && //longSide
   (Math.Max(a,b) <= Math.Min(m,n)); //shortSide
 

In JavaScript.

const fit_in = (a, b, m, n) => a + b <= Math.max(m, n);
 

You don't need to return true or false here explicitly, the comparison already has a boolean result.


const fit_in = (a, b, m, n) => a + b <= Math.max(m, n)
 

Thanks for pointing that out, edited the solution.

 

Assert.IsFalse(fit_in(1,2,3,1)

 

JS

fit_in = (a,b,m,n) => ((a + b) <= m && a <= n && b <= n) || ((a + b) <= n && a <= m && b <= m)
 

In F#.

let fit_in a b m n = a + b <= max m n
 
let actual = fit_in 1 2 3 1
Assert.That(actual, Is.False)
 

Raku:

sub fit-in($a, $b, $m, $n) { $a + $b <= max($m, $n) }