Simple Fun: Diplomas

This is an example of a “rectangle packing” problem.

The code is simple enough, but knowing and understanding the maths behind it is not directly obvious, so I wouldn’t say this is a 7kyu challenge. It is harder than that.

JavaScript

Solution 1

/**
 * Finds square size that can pack given number of rectangles.
 *
 * This is an example of a “packing rectangles” problem.
 *
 * @param {number} height
 * @param {number} width
 * @param {number} count
 * @return {number}
 */
function diplomas(height, width, count) {
  let _h, _w, side = 0;

  for (;;) {
    _h = Math.floor(side / height);
    _w = Math.floor(side / width);

    if (_h * _w >= count) return side;

    ++side;
  }
}

Solution 2

function floor(x) {
  return Math.floor(x);
}

/**
 * Finds square size that can pack given number of rectangles.
 *
 * This is an example of a “packing rectangles” problem.
 *
 * @param {number} h The height of each diploma.
 * @param {number} w The width of each diploma.
 * @param {number} c The number of diplomas.
 * @return {number}
 */
function diplomas(h, w, n) {
  if (n === 0) return 0;

  let side = 1;

  //
  // Like old-school C 😅.
  //
  while (1) {
    if (floor((side / h)) * floor((side / w)) >= n)
      return side;

    ++side;
  }
}