# Eloquent JavaScript chessboard

Is this a good way to solve the quiz "Chessboard" from http://eloquentjavascript.net/02_program_structure.html ?

Write a program that creates a string that represents an 8×8 grid, using newline characters to separate lines. At each position of the grid there is either a space or a “#” character. The characters should form a chess board.

When you have a program that generates this pattern, define a variable size = 8 and change the program so that it works for any size, outputting a grid of the given width and height.

This is my code:

 size = 10;

grid = ""

for (var i = 1; i <= size; i++) {
for (var j = 1; j <= size; j++) {
if (i % 2 === 0) {
grid+= "# "
} else {
grid+= " #"
}
}
grid+= "\n"
}

console.log(grid)

• You put a '#' and a space in each 'cell'. The problem you posted says space OR '#'. So for each iteration of the inner loop, it should be grid += "#"; or grid += " "; – DFord Aug 7 '17 at 17:12
• This code produces a board that is larger than the size specified in the challenge. – 200_success Aug 7 '17 at 19:58

Fun question;

• you should write a function that takes a parameter instead of just writing the code

• A chessboard has lots of repetition, take a minute to ponder how String.repeat could make this code much simpler.

• Your indentation is not perfect, consider using a site like http://jsbeautifier.org/

• I am not a big fan of var within the loop, I would declare var up front.

This is a possible solution that provides the right size of the board:

function createChessboardString(size){

const line = ' #'.repeat( size ),
even = line.substring(0,size),
odd = line.substring(1,size+1);
let   out = '';

while(size--){
out = out + ((size % 2) ? odd: even ) + '\n';
}

return out;
}

console.log(createChessboardString(8));


You could consider for very large boards that the board in essence repeats odd + '\n' + even, so you could repeat that as well. The problem for me is that there are too many corner cases to consider. So personally I would go for the above for any board size < 1000.

• one question: I changed the code to (i + j) % 2 === 0 because i took a look in the solution. Could you please explain me this? Why adding these together? @konijn – olivier Aug 7 '17 at 18:12
• I would have to see the surrounding code, plus that is not really what codereview is about. I was just thinking that your code seems wrong actually. If ' ' is white and '#'' is black, then your board is way too big. – konijn Aug 7 '17 at 18:21
• @konijn why are you not a fan of var within the loop? – Radmation Aug 7 '17 at 20:17
• Cant find back the exact location, but it's in there: github.com/airbnb/javascript#variables basically js hoists those variables anyway to the top – konijn Aug 7 '17 at 22:56
• Your codeuses very incon sistentspacing. – Roland Illig Oct 25 at 1:45