Task

Create a data structure and the associated methods to define and manipulate a deck of   playing cards.

The deck should contain 52 unique cards.

The methods must include the ability to:

   make a new deck
   shuffle (randomize) the deck
   deal from the deck
   print the current contents of a deck 
Each card must have a pip value and a suit value which constitute the unique value of the card.

Related tasks:

 Card shuffles
 Deal cards_for_FreeCell
 War Card_Game
 Poker hand_analyser
 Go Fish


#translated from JavaScript example
class Card
  constructor: (@pip, @suit) ->
 
  toString: => "#{@pip}#{@suit}"
 
class Deck
  pips = '2 3 4 5 6 7 8 9 10 J Q K A'.split ' '
  suits = '♣ ♥ ♠ ♦'.split ' '
 
  constructor: (@cards) ->
    if not @cards?
      @cards = []
      for suit in suits
        for pip in pips
          @cards.push new Card(pip, suit)
 
  toString: => "[#{@cards.join(', ')}]"
 
  shuffle: =>
    for card, i in @cards
      randomCard = parseInt @cards.length * Math.random()
      @cards[i] = @cards.splice(randomCard, 1, card)[0]
 
  deal: -> @cards.shift()