public void run() double sqWidth = (double) getWidth() / NUM_COLS; double sqHeight = (double) getHeight() / NUM_ROWS; for (int row = 0; row < NUM_ROWS; row++) for (int col = 0; col < NUM_COLS; col++) double x = col * sqWidth; double y = row * sqHeight; GRect square = new GRect(x, y, sqWidth, sqHeight); square.setFilled(true); if ((row + col) % 2 == 0) square.setFillColor(Color.BLACK); else square.setFillColor(Color.RED); add(square);

If (row + column) % 2 == 0 → Color A. If (row + column) % 2 == 1 → Color B.

console.log(line);

square.setColor(square.getFillColor()); Sometimes students write a complex condition like ((row % 2 == 0 && col % 2 == 0) || (row % 2 != 0 && col % 2 != 0)) . This is logically correct but verbose and error-prone. Stick with (row + col) % 2 . Advanced Variations of 9.1.7 Checkerboard V2 Variation A: Diamond or Hexagonal Checkerboard Some "V2" extensions require non-square patterns. The parity rule still applies, but you might need to offset odd rows. Example: staggered rows like a brick wall.

@.@.@ .@.@. @.@.@ .@.@. @.@.@ const readline = require('readline'); const rl = readline.createInterface( input: process.stdin, output: process.stdout ); rl.question("Rows: ", (rows) => rl.question("Cols: ", (cols) => rows = parseInt(rows); cols = parseInt(cols); for (let i = 0; i < rows; i++) let line = ""; for (let j = 0; j < cols; j++) if ((i + j) % 2 === 0) line += "X"; else line += "O";

9.1.7 Checkerboard V2 Codehs Info

public void run() double sqWidth = (double) getWidth() / NUM_COLS; double sqHeight = (double) getHeight() / NUM_ROWS; for (int row = 0; row < NUM_ROWS; row++) for (int col = 0; col < NUM_COLS; col++) double x = col * sqWidth; double y = row * sqHeight; GRect square = new GRect(x, y, sqWidth, sqHeight); square.setFilled(true); if ((row + col) % 2 == 0) square.setFillColor(Color.BLACK); else square.setFillColor(Color.RED); add(square);

If (row + column) % 2 == 0 → Color A. If (row + column) % 2 == 1 → Color B. 9.1.7 Checkerboard V2 Codehs

console.log(line);

square.setColor(square.getFillColor()); Sometimes students write a complex condition like ((row % 2 == 0 && col % 2 == 0) || (row % 2 != 0 && col % 2 != 0)) . This is logically correct but verbose and error-prone. Stick with (row + col) % 2 . Advanced Variations of 9.1.7 Checkerboard V2 Variation A: Diamond or Hexagonal Checkerboard Some "V2" extensions require non-square patterns. The parity rule still applies, but you might need to offset odd rows. Example: staggered rows like a brick wall. public void run() double sqWidth = (double) getWidth()

@.@.@ .@.@. @.@.@ .@.@. @.@.@ const readline = require('readline'); const rl = readline.createInterface( input: process.stdin, output: process.stdout ); rl.question("Rows: ", (rows) => rl.question("Cols: ", (cols) => rows = parseInt(rows); cols = parseInt(cols); for (let i = 0; i < rows; i++) let line = ""; for (let j = 0; j < cols; j++) if ((i + j) % 2 === 0) line += "X"; else line += "O"; This is logically correct but verbose and error-prone