DEV Community

Discussion on: Daily Challenge #2 - String Diamond

Collapse
 
protium profile image
protium

Here my solution: form the upper side and reuse it.
Assuming string concatenation has linear execution time, this solution should be O(middle*num). Please correct me if I'm wrong

function diamond(num) {
  if (num % 2 <= 0) return null;

  let result = "";
  const middle = Math.floor(num / 2) + 1;
  let lines = []
  for (let i = 0; i < middle; i++) {    
    lines[i] = "";
    for (let j = 0; j < num; j++ ) {
        lines[i] += j >= middle - 1 - i && j <= middle - 1 + i ? "*" : " ";      
    }
    result += lines[i] + "\n";
  }

  // reuse the triangle
  for (let i = lines.length - 2; i >= 0; i-- ) {
    result += lines[i] + "\n";
  }

  return result;
}