From 38e56e2a31c0c3588cec80b59cffb9c4d4926038 Mon Sep 17 00:00:00 2001 From: lucasmllr Date: Mon, 5 Sep 2016 17:22:44 +0200 Subject: [PATCH] poker habe ich auch noch gemacht. --- 04 - Poker.playground/Contents.swift | 147 ++++++++++++++++++++-- 04 - Poker.playground/timeline.xctimeline | 4 +- 2 files changed, 139 insertions(+), 12 deletions(-) diff --git a/04 - Poker.playground/Contents.swift b/04 - Poker.playground/Contents.swift index 855b3ee..66eedc8 100644 --- a/04 - Poker.playground/Contents.swift +++ b/04 - Poker.playground/Contents.swift @@ -14,19 +14,146 @@ //: ## Testing + +import Foundation + +enum Rank: Int, CustomStringConvertible { + + case two = 2, three, four, five, six, seven, eight, nine, ten, Jack, Queen, King, Ace + + var description: String{ + switch self{ + case .two: return "2" + case .three: return "3" + case .four: return "4" + case .five: return "5" + case .six: return "6" + case .seven: return "7" + case .eight: return "8" + case .nine: return "9" + case .ten: return "10" + case .Jack: return "J" + case .Queen: return "Q" + case .King: return "K" + case .Ace: return "A" + + } + } +} + + + enum Suit: Int, CustomStringConvertible { + + case Diamond = 1, Heart, Spate, Club + + var description: String{ + switch self{ + case .Diamond: return "\u{2666}" + case .Heart: return "\u{2665}" + case .Spate: return "\u{2660}" + case .Club: return "\u{2663}" + } + } +} + +enum Ranking: Int { + case fiveOfaKind, straightFlush, fourOfaKind, fullHouse, flush, straight, threeOfaKind, twoPair, onePain, highCard +} + +struct Card: CustomStringConvertible{ + var suit: Suit + var rank: Rank + var description: String { + return suit.description + rank.description + } +} + +extension Card: Equatable {} + +func == (lhs: Card, rhs: Card) -> Bool { + return lhs.rank == rhs.rank && lhs.suit == rhs.suit +} + +struct Hand: CustomStringConvertible { + + var cards = [Card]() + + var description: String { + var final = "" + for character in cards.description.characters { + final.append(character) + } + return final + } + + init(numberOfCards: Int){ + + while cards.count < numberOfCards { + if let rndSuit = Suit(rawValue: Int(arc4random_uniform(4))), rndRank = Rank(rawValue: Int(arc4random_uniform(13))) { + let rndCard = Card(suit: rndSuit, rank: rndRank) + if !self.cards.contains(rndCard) { + self.cards.append(rndCard) + } + } + + } + } + + init(setOfCards: [Card]) { + self.cards = setOfCards + } + + var isFlush: Bool { + var flush = true + for i in (1...self.cards.count.predecessor()){ + if self.cards[i].suit != self.cards[0].suit { + flush = false + break + } + } + return flush + } + + var ranking: Ranking { + if self.isFlush {return Ranking.flush} + else {return Ranking.highCard} + } +} + /* -var rankingCounts = [Ranking : Int]() -let samples = 100 +let pik = Suit.Spate +let zwei = Rank.two +let drei = Rank.three + + +let pikzwei = Card(suit: pik, rank: zwei) +let pikdrei = Card(suit: pik, rank: drei) + +let zweierBlatt = Hand(setOfCards: [pikzwei, pikdrei]) +print(zweierBlatt.isFlush) +print(zweierBlatt.cards[0].suit) +*/ + +var rankingCount = [Ranking : Int]() +let samples = 5000 for i in 0...samples { - let ranking = PokerHand().ranking - if rankingCounts[ranking] == nil { - rankingCounts[ranking] = 1 - } else { - rankingCounts[ranking]! += 1 + let ranking = Hand(numberOfCards: 5).ranking + if rankingCount[ranking] == nil { + rankingCount[ranking] = 1 + } + else { + rankingCount[ranking]! += 1 } } -for (ranking, count) in rankingCounts { - print("The probability of being dealt a \(ranking.description) is \(Double(count) / Double(samples) * 100)%") -} +print(rankingCount) +print(rankingCount[Ranking.flush]!) +print("probability for a flush: \(Double(rankingCount[Ranking.flush]!) / Double(samples))") + +/* +let hand = Hand(numberOfCards: 5) +print(hand.description) +print(hand.isFlush) +print(hand.ranking) + */ diff --git a/04 - Poker.playground/timeline.xctimeline b/04 - Poker.playground/timeline.xctimeline index 407a5d9..8a9eb44 100644 --- a/04 - Poker.playground/timeline.xctimeline +++ b/04 - Poker.playground/timeline.xctimeline @@ -3,12 +3,12 @@ version = "3.0">