Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Задание: конверт (https://javascript.ru/forum/misc/73399-zadanie-konvert.html)

laimas 12.04.2018 17:41

Сейчас доступна функция repeat для строки, можно и в одном цикле с итерацией равной половине входного параметра (для нечетного можно тоже условие описать) повторить нужно необходимое число раз. Если бы еще была доступна функция для отражения строки, тогда склеить ее с полученной.

рони 12.04.2018 17:44

j0hnik,
это был five o’clock для форумчан :) жаль что вы не успели в этот раз, не сомневаюсь, вы бы легко нашли решение ... :)

laimas 12.04.2018 18:23

<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

laimas,
:thanks:

рони 12.04.2018 18:38

laimas,
fn(15) ???
Цитата:

Сообщение от рони
для создания квадратов любого размера


laimas 12.04.2018 18:43

рони,
я же писал - для четных, а для нечетных надо добавить проверку на четность и корректировать число итераций и количество повторений пробелов внутри, я так думаю. Мне же не надо устраиваться на работу, я тезис выдвинул, а кому охота руки размять, пусть правят. :D

laimas 12.04.2018 18:47

А нет, не только число итераций и пробелов, еще у развернутого массива нужно будет удалять первый элемент, вернее выгоднее последний удалить перед реверсом. Вроде бы так.

j0hnik 12.04.2018 18:47

<!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

j0hnik,
:dance: :victory:

laimas 12.04.2018 19:43

Для любого

<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>


Часовой пояс GMT +3, время: 18:49.