Playing cards: Difference between revisions
Content added Content deleted
No edit summary |
(+Icon+Unicon) |
||
Line 652: | Line 652: | ||
shuffle' g (x:xs) n ys = shuffle' g' xs (n+1) (insertAt k x ys) where |
shuffle' g (x:xs) n ys = shuffle' g' xs (n+1) (insertAt k x ys) where |
||
(k,g') = randomR (0,n) g</lang> |
(k,g') = randomR (0,n) g</lang> |
||
== Icon and Unicon == |
|||
==={{header|Icon}}=== |
|||
<lang Icon>procedure main(arglist) |
|||
cards := 2 # cards per hand |
|||
players := 5 # players to deal to |
|||
write("New deck : ", showcards(D := newcarddeck())) # create and show a new deck |
|||
write("Shuffled : ", showcards(D := shufflecards(D))) # shuffle it |
|||
H := list(players) |
|||
every H[1 to players] := [] # hands for each player |
|||
every ( c := 1 to cards ) & ( p := 1 to players ) do |
|||
put(H[p], dealcard(D)) # deal #players hands of #cards |
|||
every write("Player #",p := 1 to players,"'s hand : ",showcards(H[p])) |
|||
write("Remaining: ",showcards(D)) # show the rest of the deck |
|||
end |
|||
record card(suit,pip) #: datatype for a card suit x pip |
|||
procedure newcarddeck() #: return a new standard deck |
|||
local D |
|||
every put(D := [], card(suits(),pips())) |
|||
return D |
|||
end |
|||
procedure suits() #: generate suits |
|||
suspend !["H","S","D","C"] |
|||
end |
|||
procedure pips() #: generate pips |
|||
suspend !["2","3","4","5","6","7","8","9","10","J","Q","K","A"] |
|||
end |
|||
procedure shufflecards(D) #: shuffle a list of cards |
|||
every !D :=: ?D # see INL#9 |
|||
return D |
|||
end |
|||
procedure dealcard(D) #: deal a card (from the top) |
|||
return get(D) |
|||
end |
|||
procedure showcards(D) #: return a string of all cards in the given list (deck/hand/etc.) |
|||
local s |
|||
every (s := "") ||:= card2string(!D) || " " |
|||
return s |
|||
end |
|||
procedure card2string(x) #: return a string version of a card |
|||
return x.pip || x.suit |
|||
end</lang> |
|||
Sample output: |
|||
<pre>New deck : 2H 3H 4H 5H 6H 7H 8H 9H 10H JH QH KH AH 2S 3S 4S 5S 6S 7S 8S 9S 10S JS QS KS AS 2D 3D 4D 5D 6D 7D 8D 9D 10D JD QD KD AD 2C 3C 4C 5C 6C 7C 8C 9C 10C JC QC KC AC |
|||
Shuffled : 5H 8S AC 5D 3H 9D 4S 3S 2C AD JD QH 6D 7H 4C 8H 3C KH 6S 10D 4D 8D AH 7D QS 2S QD 6H 9C KS JC 2D 10H JH 5S 2H 3D 10C 4H KC JS 8C 7S 10S KD 9S 6C 9H 7C AS QC 5C |
|||
Player #1's hand : 5H 9D |
|||
Player #2's hand : 8S 4S |
|||
Player #3's hand : AC 3S |
|||
Player #4's hand : 5D 2C |
|||
Player #5's hand : 3H AD |
|||
Remaining: JD QH 6D 7H 4C 8H 3C KH 6S 10D 4D 8D AH 7D QS 2S QD 6H 9C KS JC 2D 10H JH 5S 2H 3D 10C 4H KC JS 8C 7S 10S KD 9S 6C 9H 7C AS QC 5C</pre> |
|||
==={{header|Unicon}}=== |
|||
This Icon solution works in Unicon. |
|||
=={{header|J}}== |
=={{header|J}}== |