Я хочу реализовать метод draw (), который принимает 3 параметра width, height, padding и возвращает 2d массив, представляющий следующую форму:
[
[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],
[2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2],
[2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2],
[2,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,2],
[2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,2],
[2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,2],
[2,0,0,2,0,0,1,1,1,1,1,1,1,1,0,0,2,0,0,2],
[2,0,0,2,0,0,2,0,0,0,0,0,0,2,0,0,2,0,0,2],
[2,0,0,2,0,0,2,0,0,0,0,0,0,2,0,0,2,0,0,2],
[2,0,0,2,0,0,2,0,0,1,1,0,0,2,0,0,2,0,0,2],
[2,0,0,2,0,0,2,0,0,1,1,0,0,2,0,0,2,0,0,2],
[2,0,0,2,0,0,2,0,0,0,0,0,0,2,0,0,2,0,0,2],
[2,0,0,2,0,0,2,0,0,0,0,0,0,2,0,0,2,0,0,2],
[2,0,0,2,0,0,1,1,1,1,1,1,1,1,0,0,2,0,0,2],
[2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,2],
[2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,2],
[2,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,2],
[2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2],
[2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2],
[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
]
Форма центрирована внутридруг друга, означает Padding
делится на 2 с каждой стороны (например: Padding = 8 означает Padding Top 4, Padding Bottom 4, Padding Right 4, Padding Left 4)
top инижняя часть каждой фигуры представлена цифрой 1, которая эквивалентна "-" тире буква, когда нарисовано
правая и левая сторона каждой фигуры представлена цифрой 2, которая эквивалентнак "|"труба буква, когда рисуется
в других областях пробел представлен числом 0, что эквивалентно "" буква, когда рисуется
Я смог нарисовать внешний блок, но не смог сделать рекурсивный блок внутри массива, и мой код
function draw(width, height, padding){
return Array.from({length: width}, (_, row) => {
return Array.from({length: height}, (_, col) => {
if(width < padding/2 || height < padding/2){
return;
}
if(row === 0 || row === width - 1 ){ return 1; }
if(col === 0 || col === height - 1){ return 2; }
return 0;
})
});
}
console.log(draw(20,20,4));
Демонстрация в действии, которую я хочу воспроизвести в JS https://infinite -спокойный-stream.herokuapp.com/draw.php