evgeniy8705
@evgeniy8705
Повелитель вселенной

Правильно ли решена задача создания шахматной доски в консоли?

Прохожу курс. Там в домашнем задании была задача создания шахматной доски в консоли.
Попробовал решить. Она вроде как отрабатывает правильно, но вот решение все таки кажется не совсем правильным. Как правильно переписать следующее решение? На что стоит обратить внимание? Все таки хочется решать задачи правильно.
function createChess(a, b) {
  var value1 = "# ";
  var value2 = " #";
  var odd = "";
  var even = "";
  for (var i = 0; i < a / 2; i += 1) {
    odd += value2;
    even += value1;
  }

  for (var j = 0; j < b; j += 1) {
    if (j % 2 != 0) {
      console.log(odd);
    } else {
      console.log(even);
    }
  }
}

createChess(16, 16);


Вводим например 8, 8 и получаем доску размером 8x8. и выглядит она так:
# # # #
 # # # #
# # # #
 # # # #
# # # #
 # # # #
# # # #
 # # # #


Update/

Немного переписал решение. Но хз, лучше ли оно первого или нет. В целом похожи решения, но все же, как правильней и эффективней решить данную задачу?

Немного другое решение:
function createChess(a, b, param1, param2) {
  var value1 = param1 || "#",
      value2 = param2 || " ";
      var odd = "",
          even = "";
  for (var i = 1; i <= b; i += 1) {
    if (i % 2 != 0) {
      for (var j = 0; j < a / 2; j += 1) {
        odd += value1 + value2;
      }

      console.log(odd);
      odd = "";
    } else {
      for (var k = 0; k < a / 2; k += 1) {
        even += value2 + value1;
      }

      console.log(even);
      even = "";
    }
  }
}

createChess(8, 8, "*", " ");


Второе решение теперь кажется не лучше первого. Так как каждая строчка заново пересоздает строку и кажется это не правильно и неэффективно будет. Хз в общем. Помогите решить правильно

PSS.
Попробовал еще порешать используя просто циклы. Получился более менее вариант, который меня более чем устраивает.

function createChessBoard(value) {
  var board = "";
  for (var i = 1; i < value*value; i += 1) {
    if ((i % (value + 1)) == 0) {
      board += "\n";
    } else if (i % 2 != 0) {
      board += "*";
    } else {
      board += " ";
    }
  }
  
  return board;
}

console.log(createChessBoard(8));
  • Вопрос задан
  • 7278 просмотров
Пригласить эксперта
Ответы на вопрос 8
Уныло:

function createChess(x, y) {
	for (var i = 0; i < y; i++) {
		var string = '', a, b;

		if (i % 2) {
			a = '#';
			b = ' ';
		} else {
			a = ' ';
			b = '#';
		}

		for (var j = 0; j < x; j++) {
			if (j % 2) {
				string += a;
			} else {
				string += b;
			}
		}

		console.log(string);
	}
}

По хардкору:

function createChess(x, y) {
	for (var i = 0; i < y; i++) console.log((i % 2 ? ' #' : '# ').repeat(Math.floor(x / 2) + 1).slice(0, x % 2 - 2));
}
Ответ написан
Комментировать
BuriK666
@BuriK666
Компьютерный псих
function createChess(width, height) {
  var pattern = '# '.repeat(Math.floor(width / 2) + 1 );
  var odd = pattern.substr(0, width);
  var even = pattern.substr(1, width + 1);
  var half_height  = Math.floor(height / 2);
  for (var i = 0; i < half_height; i++) {
    console.log(odd);
    console.log(even);
  }
  if ((height % 2) == 1) {
    console.log(odd);
  }
}
createChess(8,8);
Ответ написан
@VadimFilimonov
const SIZE = 8;

function isEven(number) {
	return number % 2 === 0;
}

function getCeil(row, column) {
	if (isEven(row) === isEven(column)) return '#';
  return ' ';
}

for (let row = 0; row < SIZE; row += 1) {
	let string = '';
  for (let column = 0; column < SIZE; column += 1) {
    string += getCeil(row, column);
  }
  console.log(string);
}
Ответ написан
Комментировать
@kstyle
вместо i+=1 пишите всегда i++
Ответ написан
@Aventusa
Привет, такого решения вроде не было тут еще)
function board(x, y) {
    let string = ''
    for (let i = 0; i <= x; i++) {
        string += '\n'
        for (let j = 0; j <= y; j++) {
            if (i % 2 === 0 && j === 0) {
                string += '  #'
            } else string += ' #'

        }
    }
    console.log(string);
}

board(4, 4)
Ответ написан
Комментировать
@GlebDubrovsky
chessBoard(8);

function chessBoard(number) {
    let board = "",
        square1 = "",
        square2 = "",
        wrap = "\n",
        value = number;

    for (let i = 0; i < value; i++) {
        (i % 2) ? (square1 = "#", square2 = "0") : (square1 = "0", square2 = "#");
        for (let i = 0; i < value; i++) {
            if (i % 2) {
                board += square1;
            } else {
                board += square2;
            }
        }
        board += wrap;
    }
    console.log(board);
}
Ответ написан
Комментировать
@Astinbek
function shahmat (){
let a1 = "# # # # ";
let a2 = " # # # #";
for(let i = 0; i <4 ;i++){
console.log(a1);
console.log(a2);
}
}
shahmat()
Ответ написан
Комментировать
@lionic007
const DrawChess = (x = 8, y = 8) => {
  const TOTAL_CELL = x * y;
  let offset = false;
  let accum = "";

  for (let i = 1; i <= TOTAL_CELL; i++) {
    if (offset) {
      accum += i % 2 ? "#" : " ";
    } else {
      accum += i % 2 ? " " : "#";
    }

    if (i % x === 0) {
      offset = !offset;
      accum += "\n";
    }
  }
  
  return accum;
};
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы