/
27.06.2021 at 12:49 pm
Cuttings

Eloquent Javascript / Chapter 2, Exercise 03

Chessboard - in which I review ternary operators.
Table of Contents

Problem

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

Passing this string to console.log should show something like this:

   # # # #   
    # # # #  
   # # # #   
    # # # #  
   # # # #   
    # # # #  
   # # # #

Discussion

  1. Personally I'm not a fan of the "?" syntax. I think Python's ternary operator looks cleaner.

  2. It's possible to use a ternary operator in place of a regular if is possible, but I find it quite unreadable.

Solution

  1. Solution 1: Explicit and repetitive.

    ``` javascript
    grid_size = 8
    invert = true
    
    for (let row = 0; row < grid_size; row++) {
        row_string = `${row+1} `
    
        if (invert) {
            white = " "
            black = "#"
        } else {
            white = "#"
            black = " "
        }
    
        for (let col = 0; col < grid_size; col++) {
    
            if (col % 2 === 0) {
                row_string += `${white}`
            } else {
                row_string += `${black}`
            }
        }
        console.log(row_string)
        invert = invert ? false : true
    }
    ```
    
  2. Solution 2: cleaner, shorter. The ternary operator here isn't as readable as an if statement. I also find it quite confusing, since the .reverse() method comes as a statement, and does not mark a return value.

    ```javascript
    grid_size = 8
    invert = true
    switches = [" ", "#"]
    
    for (let row = 0; row < grid_size; row++) {
        row_string = `${row + 1} `
        row % 2 === 0 ? switches : switches.reverse()
    
        for (let col = 0; col < grid_size; col++) {
    
            if (col % 2 === 0) {
                row_string += `${switches[0]}`
            } else {
                row_string += `${switches[1]}`
            }
        }
        console.log(row_string)
    }
    ```
    
Filed under:
#
Words: 342 words approx.
Time to read: 1.37 mins (at 250 wpm)
Keywords:
, , , , , , , , ,

Other suggested posts

  1. 02.01.2020 at 11:48 am / Theory and Theatre
  2. 31.12.2018 at 06:23 pm / Why Plain Text
  3. 04.01.2018 at 12:00 am / Java Almost Requires An IDE
  4. 12.12.2017 at 12:00 am / Innocent Until Proven Guilty
  5. 24.01.2016 at 12:00 am / Prayers Like Magic
  6. 28.06.2015 at 12:00 am / No Social Transformation Without Representation
  7. 11.11.2013 at 12:00 am / 下戸 - Lower House
  8. 22.04.2012 at 12:00 am / Ludicrous Ace
  9. 20.04.2012 at 12:00 am / A Misty Morgue's Bat
  10. 22.08.2010 at 12:00 am / 柿が赤くなると医者が青くなる
© Wan Zafran. See disclaimer.