holdem 1.1.0 → 1.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 92cbd539b57a476cbfb641feded5f46b1301582b9217e85b01bd6eeb9cc0756b
4
- data.tar.gz: 583437e52a957684f41b1eefc199ad20c61d8d87357d423c9da47872698575f5
3
+ metadata.gz: 1d1d95c1dff600cb0eaf1bfd9646787f98c9a5c1c5c9f6d03a2b7893b0efaab9
4
+ data.tar.gz: 9d5089fceffb55ea1f003fad9e22d68f01ea0eb09553bba3b18368113b1cef22
5
5
  SHA512:
6
- metadata.gz: 811078542e6aeb58d340f8c1713551ac15b5f37ce4207f6f1d03a5569a92fa1aef6f44e80554309b96677863e90ab8ba9e143c4ccde6c7e269a79fb8333e06c8
7
- data.tar.gz: 24fe1195115613d30c418e7c6c58150ef390b08d18fdfac5a6f20186199fd31e8cd6c884a9058ae5e23d5775f74e5fad62c7316c33a7616276ba67590d0fc3e2
6
+ metadata.gz: bee90a5e9e189725df357fc04d51f52afaf9227d29ffd4efbc7b68ca71d1c2416c77a8eadc1f4e28daae57d18915a10f22582d9f29f467de002ef763abb09bc8
7
+ data.tar.gz: 7d30c6fcfec47960f581d78b221dd6aa2d65f7d00a639d785c3b7059f92927d3381b9bc4dad8b0a5004d2553adcb8a3ae0def1362eb2aa7365ee25ad87ebe27f
data/README.md CHANGED
@@ -45,10 +45,10 @@ Face cards (ten, jack, queen, king, and ace) are represented by (T, J, Q, K, A).
45
45
 
46
46
  Suits (club, diamond, spade, heart) are represented by (c, d, s, h).
47
47
 
48
- puts Holdem::PokerHand.new('Ac 7d 4c Td Qc Qh Ks') # => A♣ 7♦ 4♣ T♦ Q♣ Q♥ K♠ -> Pair of Qs
48
+ puts Holdem::PokerHand.new('Ac 7d 4c Td Qc Qh Ks') # => A♣ 7♦ 4♣ T♦ Q♣ Q♥ K♠ -> Pair of Qs
49
49
 
50
- card1, card2 = Card.new('Ad'), Card.new('Ah')
51
- puts Holdem::PokerHand.new([card1, card2]) # => A♦ A♥ -> Pair of As
50
+ card1, card2 = Holdem::Card.new('Ad'), Holdem::Card.new('Ah')
51
+ puts Holdem::PokerHand.new([card1, card2]) # => A♦ A♥ -> Pair of As
52
52
 
53
53
  There is also a Deck class to facilitate random poker hands:
54
54
 
@@ -74,7 +74,6 @@ Build Simulations, players, table, chips, and game objects.
74
74
 
75
75
  Add methods to PokerRank for:
76
76
 
77
- hand.open_ended?
78
77
  hand.four_to_flush?
79
78
  hand.gutshot?
80
79
 
@@ -7,7 +7,7 @@ module Holdem
7
7
 
8
8
  rank_methods = [ :rank, :score, :straight_flush?, :quads?, :four_of_a_kind?,
9
9
  :boat?, :full_house?, :flush?, :straight?, :three_of_a_kind?,
10
- :trips?, :two_pairs?, :two_pair?, :pair? ]
10
+ :trips?, :two_pairs?, :two_pair?, :pair?, :open_ended? ]
11
11
  def_delegators :@poker_rank, *rank_methods
12
12
 
13
13
  attr_reader :cards, :poker_rank
@@ -56,6 +56,10 @@ module Holdem
56
56
  false
57
57
  end
58
58
 
59
+ def four_card_straight?(list)
60
+ (list.first - list.last).abs == 3 && list.uniq.length == 4
61
+ end
62
+
59
63
  def five_card_straight?(list)
60
64
  (list.first - list.last).abs == 4 && list.uniq.length == 5
61
65
  end
@@ -77,6 +81,20 @@ module Holdem
77
81
  pairs.any? { |count,_cards| count == size }
78
82
  end
79
83
 
84
+ def open_ended?
85
+ return false if straight?
86
+
87
+ card_values = sorted_values
88
+ # Add ace to end of sorted values if present
89
+ card_values.push(1) if card_values.include?(14)
90
+ card_values.each_cons(4) do |vals|
91
+ if four_card_straight?(vals) && vals.last != 1 && vals.first != 14
92
+ return true
93
+ end
94
+ end
95
+ false
96
+ end
97
+
80
98
  alias_method :quads?, :four_of_a_kind?
81
99
  alias_method :trips?, :three_of_a_kind?
82
100
  alias_method :boat?, :full_house?
@@ -1,3 +1,3 @@
1
1
  module Holdem
2
- VERSION = "1.1.0"
2
+ VERSION = "1.1.1"
3
3
  end
@@ -70,6 +70,20 @@ class PokerRankingTest < Minitest::Test
70
70
  refute hand2.straight_flush?
71
71
  end
72
72
 
73
+ def test_open_ended?
74
+ cards1 = Holdem::CardGenerator.build(%w(Jd Qd Ad Kd 2d))
75
+ hand1 = Holdem::PokerHand.new(cards1)
76
+ refute hand1.open_ended?
77
+
78
+ cards2 = Holdem::CardGenerator.build(%w(Jd Qd Td Kd 2d))
79
+ hand2 = Holdem::PokerHand.new(cards2)
80
+ assert hand2.open_ended?
81
+
82
+ cards3 = Holdem::CardGenerator.build(%w(Jd Qd Td Kd 9d))
83
+ hand3 = Holdem::PokerHand.new(cards3)
84
+ refute hand3.open_ended?
85
+ end
86
+
73
87
  def test_alias_method_trips?
74
88
  cards = Holdem::CardGenerator.build(%w(Jd Qd Jd Jd Td 7d Tc))
75
89
  hand = Holdem::PokerHand.new(cards)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: holdem
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jamie Berczel
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-05-20 00:00:00.000000000 Z
11
+ date: 2020-07-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler