JSFiddle - React, Tailwind, and code Playground

JavaScript

const solver = () => {
  let input = document.body.childNodes[0].innerHTML.trim().split('\n').map((str) => str.split(', ').reduce((arr,cv, i) => {
    if (i === 0) {
      arr.x = parseInt(cv.substring(13));
    } else if (i === 1) {
      arr.y = parseInt(cv.substring(0, 6));
      arr.xV = parseInt(cv.substring(cv.indexOf('&lt') + 4));
    } else {
      arr.yV = parseInt(cv.substring(0, cv.length - 1));
    }
    return arr;
  }, {}));

  let min = Number.MAX_VALUE;
  let i = 0;
  while (true) {
    let max = Number.MIN_VALUE;
    input.forEach(obj => {
      obj.x += obj.xV;
      obj.y += obj.yV;
      if (Math.abs(obj.y) > max) max = Math.abs(obj.y);
    });

    if (max < min) min = max;
    else {
      input.forEach(obj => {
        obj.x -= obj.xV;
        obj.y -= obj.yV;
      });
      break;
    };
    i++;
  }

  let minX = Number.MAX_VALUE;
  let minY = Number.MAX_VALUE;
  let maxX = Number.MIN_VALUE;
  let maxY = Number.MIN_VALUE;

  input.forEach(obj => {
    if (obj.x < minX) minX = obj.x;
    if (obj.y < minY) minY = obj.y;
    if (obj.x > maxX) maxX = obj.x;
    if (obj.y > maxY) maxY = obj.y;
  });

  let grid = [];

  let totalX = Math.abs(maxX) + 2;
  let totalY = Math.abs(maxY) + 2;

  for (let i = 0; i < totalY; i++) {
    grid.push([]);
    for (let j = 0; j < totalX; j++) {
      grid[i].push('.');
    }
  }

  input.forEach(obj => grid[obj.y][obj.x] = '#');

  if (minY > 0) grid = grid.slice(minY - 1);
  if (minX > 0) grid = grid.map(arr => arr.slice(minX - 1));

  let string = '';

  for (let i = 0; i < grid.length; i++) {
    for (let j = 0; j < grid[0].length; j++) {
      string += grid[i][j];
    }
    string += '\n';
  }

  console.log(string);

  return i;
}
solver();