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