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.

a,b are the sizes of the squares
m,n are the sizes of the suitcase

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


The hardworking team behind dev.to ❤️


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.





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)


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