/
27.06.2021 at 12:49 pm
Cuttings

Eloquent Javascript / Chapter 2, Exercise 03

Chessboard - in which I review ternary operators.

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. 23.03.2023 at 11:12 am / Copywork vs Master Studies
  2. 04.07.2021 at 09:08 am / Learning D3 with P5/Processing
  3. 04.06.2020 at 09:43 am / A Traveling Minstrel's Piano
  4. 23.08.2018 at 09:53 am / Nostalgic Non-Memories
  5. 19.08.2018 at 02:13 pm / Saunter Not
  6. 24.10.2015 at 12:00 am / Salomon v Salomon is Antiquated
  7. 02.12.2013 at 12:00 am / Coloured Plasmids
  8. 03.07.2013 at 12:00 am / Craft Versus Discipline
  9. 22.04.2012 at 12:00 am / Ludicrous Ace
  10. 16.08.2010 at 12:00 am / You Have Reason
© Wan Zafran. See disclaimer.