deck_of_cards_handler 0.1.7 → 0.1.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6906ff341d8f885efe6e8d9489f526e89f860de3473c09480eadea613390c8ea
|
4
|
+
data.tar.gz: e128dfd6889392b9c4313b41520c590f21209f7fb1c855430b90cc3b4a820986
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 549cf0b957134db0d190633b022f023b7e19a5a00f28cbfc968a39c39123e384e5d8335f627ae235392dcb1a173a2ad148cee1edef53a5bc9a67a5745ca90c6e
|
7
|
+
data.tar.gz: 5ebc5edd4ac1036615fabed26bc89d7fb2eb44c83635801e64c197499e4e55142a59250088debea153fe277022364733cc05c836b917ad1d3dde88a45dc1d8c7
|
data/README.md
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
[](https://badge.fury.io/rb/deck_of_cards_handler) [](https://github.com/simonbernard2/deck_of_cards/actions/workflows/ruby.yml)
|
2
|
+
|
1
3
|
# Deck of cards handler
|
2
4
|
|
3
5
|
A ruby gem for simulating real-world deck handling: shuffle, cut, deal, cull
|
@@ -40,6 +40,46 @@ class Card
|
|
40
40
|
Card.black_suits.include?(suit)
|
41
41
|
end
|
42
42
|
|
43
|
+
sig { returns(T::Boolean) }
|
44
|
+
def clubs?
|
45
|
+
suit == "C"
|
46
|
+
end
|
47
|
+
|
48
|
+
sig { returns(T::Boolean) }
|
49
|
+
def hearts?
|
50
|
+
suit == "H"
|
51
|
+
end
|
52
|
+
|
53
|
+
sig { returns(T::Boolean) }
|
54
|
+
def spades?
|
55
|
+
suit == "S"
|
56
|
+
end
|
57
|
+
|
58
|
+
sig { returns(T::Boolean) }
|
59
|
+
def diamonds?
|
60
|
+
suit == "D"
|
61
|
+
end
|
62
|
+
|
63
|
+
sig { returns(T::Boolean) }
|
64
|
+
def even?
|
65
|
+
Card.even_values.include?(value)
|
66
|
+
end
|
67
|
+
|
68
|
+
sig { returns(T::Boolean) }
|
69
|
+
def odd?
|
70
|
+
Card.odd_values.include?(value)
|
71
|
+
end
|
72
|
+
|
73
|
+
sig { returns(T::Boolean) }
|
74
|
+
def spot?
|
75
|
+
Card.spot_values.include?(value)
|
76
|
+
end
|
77
|
+
|
78
|
+
sig { returns(T::Boolean) }
|
79
|
+
def court?
|
80
|
+
Card.court_values.include?(value)
|
81
|
+
end
|
82
|
+
|
43
83
|
sig { returns(String) }
|
44
84
|
def to_s
|
45
85
|
"#{value} of #{suit}"
|
@@ -87,5 +127,25 @@ class Card
|
|
87
127
|
def values
|
88
128
|
%w[A 2 3 4 5 6 7 8 9 10 J Q K].freeze
|
89
129
|
end
|
130
|
+
|
131
|
+
sig { returns(T::Array[String]) }
|
132
|
+
def odd_values
|
133
|
+
%w[A 3 5 7 9 J K].freeze
|
134
|
+
end
|
135
|
+
|
136
|
+
sig { returns(T::Array[String]) }
|
137
|
+
def even_values
|
138
|
+
%w[2 4 6 8 10 Q].freeze
|
139
|
+
end
|
140
|
+
|
141
|
+
sig { returns(T::Array[String]) }
|
142
|
+
def court_values
|
143
|
+
%w[J Q K].freeze
|
144
|
+
end
|
145
|
+
|
146
|
+
sig { returns(T::Array[String]) }
|
147
|
+
def spot_values
|
148
|
+
%w[A 2 3 4 5 6 7 8 9 10].freeze
|
149
|
+
end
|
90
150
|
end
|
91
151
|
end
|
@@ -21,8 +21,38 @@ module Cuts
|
|
21
21
|
self.cards = [cards, top_half.cards].flatten
|
22
22
|
end
|
23
23
|
|
24
|
+
sig { params(piles: T::Array[Packet]).void }
|
25
|
+
def reassemble_left_to_right_on_top(piles)
|
26
|
+
assembled = reassemble_cards(piles)
|
27
|
+
self.cards = assembled + cards
|
28
|
+
end
|
29
|
+
|
30
|
+
sig { params(piles: T::Array[Packet]).void }
|
31
|
+
def reassemble_left_to_right_on_bottom(piles)
|
32
|
+
assembled = reassemble_cards(piles)
|
33
|
+
self.cards += assembled
|
34
|
+
end
|
35
|
+
|
36
|
+
sig { params(piles: T::Array[Packet]).void }
|
37
|
+
def reassemble_right_to_left_on_top(piles)
|
38
|
+
assembled = reassemble_cards(piles, reverse: true)
|
39
|
+
self.cards = assembled + cards
|
40
|
+
end
|
41
|
+
|
42
|
+
sig { params(piles: T::Array[Packet]).void }
|
43
|
+
def reassemble_right_to_left_on_bottom(piles)
|
44
|
+
assembled = reassemble_cards(piles, reverse: true)
|
45
|
+
self.cards += assembled
|
46
|
+
end
|
47
|
+
|
24
48
|
private
|
25
49
|
|
50
|
+
sig { params(piles: T::Array[Packet], reverse: T::Boolean).returns(T::Array[Card]) }
|
51
|
+
def reassemble_cards(piles, reverse: false)
|
52
|
+
piles.reverse! if reverse
|
53
|
+
piles.reduce([]) { |acc, pile| acc << pile.cards }.flatten
|
54
|
+
end
|
55
|
+
|
26
56
|
sig { params(number: Integer).returns(T::Boolean) }
|
27
57
|
def invalid_number_to_cut_to?(number)
|
28
58
|
return true if number.negative?
|
@@ -14,9 +14,7 @@ class Packet
|
|
14
14
|
attr_accessor :cards
|
15
15
|
|
16
16
|
sig { params(cards: T::Array[Card]).void }
|
17
|
-
def initialize(cards:)
|
18
|
-
raise ArgumentError if cards.empty?
|
19
|
-
|
17
|
+
def initialize(cards: [])
|
20
18
|
@cards = T.let(cards, T::Array[Card])
|
21
19
|
end
|
22
20
|
|
@@ -105,4 +103,23 @@ class Packet
|
|
105
103
|
def to_s
|
106
104
|
cards.map(&:to_s)
|
107
105
|
end
|
106
|
+
|
107
|
+
sig do
|
108
|
+
returns(
|
109
|
+
T.any(
|
110
|
+
PokerHands::HighCard,
|
111
|
+
PokerHands::OnePair,
|
112
|
+
PokerHands::TwoPairs,
|
113
|
+
PokerHands::ThreeOfAKind,
|
114
|
+
PokerHands::Straight,
|
115
|
+
PokerHands::Flush,
|
116
|
+
PokerHands::FullHouse,
|
117
|
+
PokerHands::FourOfAKind,
|
118
|
+
PokerHands::StraightFlush
|
119
|
+
)
|
120
|
+
)
|
121
|
+
end
|
122
|
+
def to_poker_hand
|
123
|
+
PokerHands::PokerHand.create(cards:)
|
124
|
+
end
|
108
125
|
end
|