Workshop › Memory › Step 12 of 25

A fair shuffle

What we are doing

Right now the pairs sit side by side. We shuffle the deck with the Fisher–Yates shuffle: walk from the last position to the first, and swap each one with a random position from 0 up to it. Every order is equally likely.

```js
// Fisher–Yates: every order is equally likely.
function shuffle(items) {
  for (let i = items.length - 1; i > 0; i--) {
    const j = Math.floor(Math.random() * (i + 1))
    ;[items[i], items[j]] = [items[j], items[i]]
  }
  return items
}

  const deck = shuffle([...SYMBOLS, ...SYMBOLS])
```

What it means

Your turn

  1. Above function newGame, write the comment and shuffle, then an empty line.
  2. In newGame, wrap the deck in shuffle( ... ).

Skills: Arrays and objects, Functions

All steps

  1. Get the canvas and the pen
  2. The table
  3. One card
  4. A row of cards
  5. Four rows
  6. Every fruit twice
  7. Cards that know themselves
  8. A card's corner
  9. Draw the cards from the list
  10. Draw again and again
  11. The face of a card
  12. A fair shuffle
  13. Which card is at a point?
  14. Click to turn a card
  15. One place for the rules
  16. Two cards at a time
  17. Pair or no pair
  18. Count the moves
  19. Show moves and pairs
  20. All pairs found
  21. Play again
  22. A number that follows
  23. Swap sides halfway
  24. Animate the turn
  25. Build it yourself: your best game