Deal cards for FreeCell: Difference between revisions

Line 3,134:
♠4 ♠T ♥2 ♦5 ♣J ♣6 ♥J ♥Q
♦J ♠K ♣K ♥4
</pre>
 
=={{header|Swift}}==
<lang Swift>struct MicrosoftLinearCongruentialGenerator {
var seed : Int
mutating func next() -> Int {
self.seed = (self.seed * 214013 + 2531011) % (Int(Int32.max)+1)
return self.seed >> 16
}
}
enum Suit : String, CustomStringConvertible, CaseIterable {
case clubs = "C"
case diamonds = "D"
case hearts = "H"
case spades = "S"
var description: String {
return self.rawValue
}
}
enum Rank : Int, CustomStringConvertible, CaseIterable {
case ace=1
case two
case three
case four
case five
case six
case seven
case eight
case nine
case ten
case jack
case queen
case king
var description: String {
let d : [Rank:String] = [.ace:"A", .king:"K", .queen:"Q", .jack:"J", .ten:"T"]
return d[self] ?? String(self.rawValue)
}
}
struct Card : CustomStringConvertible {
let rank : Rank
let suit : Suit
var description : String {
return String(describing:self.rank) + String(describing:self.suit)
}
init(rank:Rank, suit:Suit) {
self.rank = rank; self.suit = suit
}
init(sequence n:Int) {
self.init(rank:Rank.allCases[n/4], suit:Suit.allCases[n%4])
}
}
struct Deck : CustomStringConvertible {
var cards = [Card]()
init(seed:Int) {
for i in (0..<52) {
self.cards.append(Card(sequence:51-i))
}
var r = MicrosoftLinearCongruentialGenerator(seed: seed)
for i in 0..<51 {
self.cards.swapAt(i, 51-r.next()%(52-i))
}
}
var description : String {
var s = ""
for (ix,c) in self.cards.enumerated() {
s.write(String(describing:c))
s.write(ix % 8 == 7 ? "\n" : " ")
}
return s
}
}
let d1 = Deck(seed: 1)
print(d1)
let d617 = Deck(seed: 617)
print(d617)
</lang>
 
{{out}}
<pre>
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>
<pre>
7D AD 5C 3S 5S 8C 2D AH
TD 7S QD AC 6D 8H AS KH
TH QC 3H 9D 6S 8D 3D TC
KD 5H 9S 3C 8S 7H 4D JS
4C QS 9C 9H 7C 6H 2C 2S
4S TS 2H 5D JC 6C JH QH
JD KS KC 4H
</pre>
 
Anonymous user