Jump to content

Deal cards for FreeCell: Difference between revisions

(added ocaml)
Line 161:
JD 7D 8H 9C 2H QD 4C 5H
KC 8D 2S 3S</pre>
 
=={{header|Icon}} and {{header|Unicon}}==
<lang Icon>procedure main(A) # freecelldealer
freecelldealer(\A[1] | &null) # seed from command line
end
 
procedure newDeck() #: return a new unshuffled deck
every D := list(52) & i := 0 & r := !"A23456789TJQK" & s := !"CDHS" do
D[i +:= 1] := r || s # initial deck AC AD ... KS
return D
end
 
procedure freecelldealer(gamenum) #: deal a freecell hand
/gamenum := 11982
return showHand(freecellshuffle(newDeck(),gamenum))
end
 
procedure showHand(D) #: show a freecell hand
write("Hand:\n")
every writes(" ",(1 to 8) | "\n")
every writes(" ",D[i := 1 to *D]) do
if i%8 = 0 then write()
write("\n")
return D
end
 
procedure freecellshuffle(D,gamenum) #: freecell shuffle
rand_freecell(gamenum) # seed random number generator
D2 := []
until *D = 0 do { # repeat until all dealt
D[r := rand_freecell() % *D + 1] :=: D[*D] # swap random & last cards
put(D2,pull(D)) # remove dealt card from list
}
return D2
end
 
procedure rand_freecell(x)
static seed
if \x | /seed then
return seed := \x | 0
seed := (214013 * seed + 2531011) % 2147483648
return ishift(seed,-16)
end</lang>
 
Sample output for game 1:<pre>Hand:
 
1 2 3 4 5 6 7 8
JD 2D 9H JC 5D 7H 7C 5H
KD KC 9S 5S AD QC KH 3H
2S KS 9D QD JS AS AH 3C
4C 5C TS QH 4H AC 4D 7S
3S TD 4S TH 8H 2C JH 7D
6D 8S 8D QS 6C 3D 8C TC
6S 9C 2H 6H</pre>
 
=={{header|J}}==
Anonymous user
Cookies help us deliver our services. By using our services, you agree to our use of cookies.