12.04.2018, 17:41
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сейчас доступна функция repeat для строки, можно и в одном цикле с итерацией равной половине входного параметра (для нечетного можно тоже условие описать) повторить нужно необходимое число раз. Если бы еще была доступна функция для отражения строки, тогда склеить ее с полученной.
|
|
12.04.2018, 17:44
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,121
|
|
j0hnik,
это был five o’clock для форумчан жаль что вы не успели в этот раз, не сомневаюсь, вы бы легко нашли решение ...
|
|
12.04.2018, 18:23
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
<html>
<head>
<style>
body{
font-size: 24px;
line-height: 24px;
text-align: center;
}
</style>
</head>
<body>
<script>
function fn(a) {
for(var i=0, k = a/2-1, s = ['*'.repeat(a)+'\n']; i < k; i++) {
s.push('*'+' '.repeat(i)+'*'+' '.repeat(a - 4 - 2 * i)+'*'+' '.repeat(i)+'*\n');
}
document.write('<pre>'+s.join('')+s.reverse().join(''))
}
fn(14)
</script>
</body>
</html>
Была бы string.reverse(), упаковали половину в строку, присоединили к ней развернутую и готово.
|
|
12.04.2018, 18:33
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,121
|
|
laimas,
|
|
12.04.2018, 18:38
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,121
|
|
laimas,
fn(15) ???
Сообщение от рони
|
для создания квадратов любого размера
|
|
|
12.04.2018, 18:43
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
рони,
я же писал - для четных, а для нечетных надо добавить проверку на четность и корректировать число итераций и количество повторений пробелов внутри, я так думаю. Мне же не надо устраиваться на работу, я тезис выдвинул, а кому охота руки размять, пусть правят.
|
|
12.04.2018, 18:47
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
А нет, не только число итераций и пробелов, еще у развернутого массива нужно будет удалять первый элемент, вернее выгоднее последний удалить перед реверсом. Вроде бы так.
|
|
12.04.2018, 18:47
|
|
Профессор
|
|
Регистрация: 01.12.2016
Сообщений: 3,650
|
|
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
body{
font-size: 24px;
line-height: 24px;
text-align: center;
padding: 0;
margin: 0;
}
b{
width: 12px;
display: inline-block;
}
</style>
</head>
<body>
<script>
function fn(a){
var str = "";
for (var i=0; i<a; i++) {
for (var j=0; j<a; j++)
str += (i==0||i==a-1||j==i||j+i==a-1||j==0||j==a-1)?"<b>#</b>":"<b> </b>";
str += "<br>";
}
document.write(str);
}
fn(18);
</script>
</body>
</html>
|
|
12.04.2018, 18:48
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,121
|
|
j0hnik,
|
|
12.04.2018, 19:43
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Для любого
<html>
<head>
<meta charset="utf-8">
<style>
body{
font-size: 24px;
line-height: 12px;
text-align: center;
}
</style>
<script>
function fn(a) {
var o = document.querySelector('pre');
if(a > 4) {
for(var i=0, k = a & 1 ? Math.floor(a/2) : a/2-1, s = ['*'.repeat(a)+'\n']; i < k; i++) {
s.push('*'+' '.repeat(i)+(!(a & 1) || i + 1 < k ? '*'+' '.repeat(a - 4 - 2 * i) : '')+'*'+' '.repeat(i)+'*\n');
}
o.textContent = s.join('')+(a & 1 ? s.slice(0, -1) : s).reverse().join('')
} else o.textContent = "Фиг вам!";
}
</script>
</head>
<body>
<input oninput="fn(this.value)" />
<pre></pre>
</body>
</html>
Последний раз редактировалось laimas, 12.04.2018 в 20:26.
|
|
|
|