Подскажите пжл как нарисовать двойной пустой ромб. Сам ромб я реализовал, но не пойму как сделать его двойным.
function printMirror(n) {
let i, j;
let str = '';
for (i = 1; i <= n; i++) {
for (j = n; j > i; j--) {
str += ' ';
}
str += '*';
for (j = 1; j < (i - 1) * 2; j++) {
str += ' ';
}
if (i == 1) {
str += ('\n');
} else {
str += ('*\n');
}
}
for (i = 2; i <= n; i++) {
for (j = 1; j < i; j++) {
str += " ";
}
for (j = 1; j <= n * 2 - (2 * i - 1); j++) {
if (i == 0 || j == 1 || j == n * 2 - (2 * i - 1)) {
str += "*";
} else {
str += " ";
}
}
str += "\n";
}
return '`\n' + str + '`';
}
Это можно было бы делать "чистыми" for... но показалось легче немного поиграть с массивами.
( JsFiddle )
let demo = document.getElementById('demo');
demo.value = printMirror(6, 3, 3); // 6 "этажей", 3 ромбика, по 3 пробела между ними
function printMirror(n, qty, space) {
space = space ? multiplyStr(" ", space) : "";
let strs = []; // Будем собирать все строчки в массив
for( let i = 0; i < n; i++ ){
let str = "";
for( let j = n; j >= 0; j-- ){ // Обратный перебор, чтобы в конце был один reverse
str += ( j == i ) ? "*" : " "; // Можно поставить и 2-3 пробела - будет "толще"
}
// Один раз пробежались и усё - уже есть основная "лесенка" из звездочек.
// Всё остальное можно строить на её основе.
str += str.split("").reverse().slice(1).join("");
// Перевернули, убрали один символ, результат добавили к начальной строке. Было
// * *
// * станет * *
// * * *
let s = str;
for( let j = 1; j < qty; j++ ){
str += space + s;
/* Повторяем еще qty-1 раз, вставляя между ними нужное кол-во пробелов */
}
strs.push(str); // Сохраняем каждую готовую строку в массиве
}
return '`\n' + strs.join('\n') + '\n' + strs.reverse().slice(1).join('\n') + '\n`';
}
function multiplyStr(str, qty){
let x = "";
for( let i = 0; i < qty; i++ ){
x += str;
}
return x;
}
/***** Кусок Демо *****/
let n = document.getElementById('n');
let qty = document.getElementById('qty');
let space = document.getElementById('space');
document.getElementById('print').addEventListener('click', function(){
demo.value = printMirror(n.value || 5, qty.value, space.value);
});
#demo {
position: fixed;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
padding-top: 20px;
box-sizing: border-box;
overflow-x: auto;
white-space: pre;
}
.menu {
position: fixed;
top: 5px;
right: 20px;
}
input { width: 40px; text-align: center; }
<textarea id="demo"></textarea>
<div class="menu">
<button id="print">printMirror</button> (
<input id="n" placeholder="n">,
<input id="qty" placeholder="qty">,
<input id="space" placeholder="space">)
</div>
P.s. если соберетесь вставить это куда-нибудь в textarea - надо дать ему overflow-x: auto; white-space: pre;
— чтобы всё не испортилось, если экран окажется меньше, чем длина строк.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Как мне записывать новое значение переменной oB? Чтобы каждую секунду оно обновлялось
Как менять значение left с интервалом? Например left = -800px , нужно каждые три секунды увеличивать left на 260px , как правильно прописать свойство в js , у меня...
Очень нужна помощь в JavaScriptЗадание для новичков, но совсем не удаётся решить ее