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


 
Red [Title: "Playing Cards"]
 
pip: ["a" "2" "3" "4" "5" "6" "7" "8" "9" "10" "j" "q" "k"]
suit: ["♣" "♦" "♥" "♠"]
 
make-deck: function [] [
	new-deck: make block! 52
	foreach s suit [foreach p pip [append/only new-deck reduce [p s]]]
	return new-deck
]
 
shuffle: function [deck [block!]] [deck: random deck]
 
deal: function [other-deck [block!] deck [block!]] [unless empty? deck [append/only other-deck take deck]] 
 
contents: function [deck [block!]] [
	line: 0
	repeat i length? deck [
		prin [trim/all form deck/:i " "]
		if (to-integer i / 13) > line [line: line + 1 print ""]
]]
 
deck: shuffle make-deck
print "40 cards from a deck:"
loop 5 [ print "" loop 8 [prin [trim/all form take deck " "]]]
prin "^/^/remaining: "
contents deck
 