/
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. 01.04.2023 at 11:27 am / Search Notes Fast: With Taskwarrior, jq & ripgrep
  2. 27.06.2021 at 12:49 pm / Eloquent Javascript / Chapter 2, Exercise 03
  3. 25.08.2020 at 09:03 pm / Hamstrung Limitations
  4. 13.02.2020 at 10:29 am / The Code Language Lawyers
  5. 19.08.2018 at 02:13 pm / Saunter Not
  6. 08.02.2016 at 12:00 am / Eye to Eye (Jonathan Young's Version)
  7. 21.12.2015 at 12:00 am / Emails and English Weather
  8. 16.01.2015 at 12:00 am / Ih Ah! (Devin Townsend)
  9. 16.03.2012 at 12:00 am / Sentient Vocal Directives
  10. 14.08.2010 at 12:00 am / 豹変
© Wan Zafran. See disclaimer.