@thsiganenko
Пользователь электрического примуса

Какие еще способом можно решить задачу о формировании строки заданного вида (решение на JavaScript)?

Доброго времени суток участникам сообщества Toster. Это мой первый вопрос на проекте, так что не судите строго за формулировку.
Задача:
Сформировать строку, содержащую матрицу с нулями и единицами по схеме:
0 0 0 1 0 0 0
0 0 1 1 1 0 0
0 1 1 1 1 1 0
1 1 1 1 1 1 1
0 1 1 1 1 1 0
0 0 1 1 1 0 0
0 0 0 1 0 0 0
И вывести ее на дисплей.


Написал решение на JavaScript для вывода результата в консоль браузера.
(function matrixZeroOwe (line){

	 //Определяем середину матрицы, в случае если её размерность будет отличной от 7
   var count = parseInt(line/2);
   
   // Переменная, в которой будет храниться конечный результат
   var strLine = '';

   // Формируем первую половину матрицы, в данном случае первые 4 строки нулей и единиц
   	for(var i = 0; i <= count; i++){
      		strLine += '0'.repeat(count - i) + '1'.repeat(1 + i*2) + '0'.repeat(count - i) + '\n';
   	}

  // Формируем вторую половину матрицы, в данном случае последние 3 строки нулей и единиц
   	for(i -= 2; i >= 0; i--){
      		strLine += '0'.repeat(count - i) + '1'.repeat(1 + i*2) + '0'.repeat(count - i) + '\n';
   	}

   	console.log(strLine);

}
)(7);

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

В связи с чем хотел бы спросить у сообщества, какие варианты решения данной задачи можно найти?
  • Вопрос задан
  • 296 просмотров
Решения вопроса 1
standy
@standy
Вот так: jsfiddle.net/aLhetfa4/1
Для верхнего левого уголка, сумма индексов в матрице меньше половины,
для верхнего правого разница индексов меньше половины, и так далее..

Итоговый код такой: jsfiddle.net/aLhetfa4/3

upd:
Немного сместил систему отсчета, и код стал еще проще:
jsfiddle.net/aLhetfa4/4
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы