Матрица Javascript: горизонтальная и вертикальная нумерация для определения местоположения значения в заданной координате a,b

#javascript #node.js

Вопрос:

Я работаю над требованием, в котором мне нужно что-то напечатать, скажем, в виде сетки или квадрата, как показано ниже

 *****
*****
*****
*****
*****
 

Не все строки и столбцы будут иметь значения. поэтому мне нужно добавить числа по возрастанию от 0 как по вертикали, так и по горизонтали, чтобы выяснить, где отсутствует значение, и зарегистрировать его.

Ожидается, что это

 5*****
4****N
3***NN
2**NNN
1*NNNN
012345
 

Здесь N — пустое значение

Теперь рассмотрим вертикальные числа как Y и горизонтальные числа как X. При X,Y, равном (3,1), значения нет.

Поэтому сначала я начал работать над печатью этого шаблона, поэтому я попробовал ниже

 const n = 5;

for(let i = n; i>=0; i--){
   for(let j = 0; j<=i; j  ){
    if(j!=0){
       process.stdout.write("*")
    }else{
      process.stdout.write(i)
    }
 }
  console.log(); // just for newline
} 

Я исследовал онлайн и нашел приведенный выше код, который на самом деле близок, но я столкнулся с некоторыми проблемами

  1. Когда я запускаю это в локальном режиме, он выдает аргумент «фрагмент», который должен иметь тип string или экземпляр Buffer или Uint8Array. Получен номер типа (5). Я не могу использовать document.write, потому что я делаю это в nodejs, каков обходной путь для печати без /n — новой строки этой консоли.журнал добавляется по умолчанию?
  2. Что-то не так с горизонтальной нумерацией, в то время как вертикальная кажется прекрасной. Что я делаю не так?
  3. Есть ли способ сделать это без 2 циклов? Было бы здорово, если бы кто-нибудь мог дать мне лучший код с меньшей сложностью

опять же, чтобы быть точным, я пытаюсь напечатать это

 5*****
4****
3***
2**
1*
012345
 

Ответ №1:

Вот еще одна попытка. Вместо прямой записи в stdout, соберите таблицу в массив и отправьте массив в console.log . Кроме того, он использует только один цикл.

 function makeTable(limit) {
  let rows = [];
  let last = [];
  let i = limit;
  while (i >= 0) {
    let stars = new Array(i).fill('*');
    if (i > 0) {
      rows.push([i].concat(stars).join(''));
    }
    last.push(i);
    i -= 1;
  }
  return rows.concat(last.reverse().join('')).join('n');
}

console.log(makeTable(5)); 

Комментарии:

1. Большое вам спасибо, это идеально. 🙂