bridge 0.0.22 → 0.0.23
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +1 -1
- data/VERSION +1 -1
- data/bridge.gemspec +2 -2
- data/lib/bridge/deal.rb +39 -0
- data/test/test_deal.rb +91 -0
- metadata +3 -3
data/README.rdoc
CHANGED
@@ -27,7 +27,7 @@ Methods:
|
|
27
27
|
|
28
28
|
You can also ask for all possible contracts finished with given points:
|
29
29
|
Bridge::Score.with_points(980)
|
30
|
-
#=> ["1NTX
|
30
|
+
#=> ["1NTX+4v", "2C/DX+4v", "6H/S="]
|
31
31
|
|
32
32
|
You can use regexp to check if contract with result is valid:
|
33
33
|
Bridge::Score::REGEXP
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.23
|
data/bridge.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{bridge}
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.23"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Jakub Kuźma"]
|
12
|
-
s.date = %q{2010-03-
|
12
|
+
s.date = %q{2010-03-28}
|
13
13
|
s.description = %q{Useful contract bridge utilities - deal generator, id to deal and deal to id conversion}
|
14
14
|
s.email = %q{qoobaa+github@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
data/lib/bridge/deal.rb
CHANGED
@@ -133,6 +133,22 @@ module Bridge
|
|
133
133
|
end
|
134
134
|
alias :hcp :honour_card_points
|
135
135
|
|
136
|
+
def sort_by_color!(trump = nil)
|
137
|
+
sort_by_color(trump).each do |direction, hand|
|
138
|
+
self[direction] = hand
|
139
|
+
end
|
140
|
+
self
|
141
|
+
end
|
142
|
+
|
143
|
+
def sort_by_color(trump = nil)
|
144
|
+
DIRECTIONS.inject({}) do |sorted, direction|
|
145
|
+
splitted_colors = split_colors(direction)
|
146
|
+
sorted_colors = sort_colors(splitted_colors.keys, trump)
|
147
|
+
sorted[direction] = sorted_colors.inject([]) { |cards, color| cards << splitted_colors.delete(color) }.flatten
|
148
|
+
sorted
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
136
152
|
private
|
137
153
|
|
138
154
|
def must_be_direction!(string)
|
@@ -143,5 +159,28 @@ module Bridge
|
|
143
159
|
must_be_direction!(direction)
|
144
160
|
instance_variable_set("@#{direction.to_s.downcase}", cards)
|
145
161
|
end
|
162
|
+
|
163
|
+
def split_colors(direction)
|
164
|
+
TRUMPS.inject({}) do |colors, trump|
|
165
|
+
cards = self[direction].select { |card| card.suit == trump }
|
166
|
+
colors[trump] = cards unless cards.empty?
|
167
|
+
colors
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
171
|
+
def sort_colors(colors, trump = nil)
|
172
|
+
black = ["S", "C"] & colors
|
173
|
+
red = ["H", "D"] & colors
|
174
|
+
sorted = if black.delete(trump)
|
175
|
+
[trump] << red.shift << black.shift << red.shift
|
176
|
+
elsif red.delete(trump)
|
177
|
+
[trump] << black.shift << red.shift << black.shift
|
178
|
+
elsif black.size >= red.size
|
179
|
+
[black.shift] << red.shift << black.shift << red.shift
|
180
|
+
else
|
181
|
+
[red.shift] << black.shift << red.shift << black.shift
|
182
|
+
end
|
183
|
+
sorted.compact
|
184
|
+
end
|
146
185
|
end
|
147
186
|
end
|
data/test/test_deal.rb
CHANGED
@@ -131,3 +131,94 @@ class TestDeal < Test::Unit::TestCase
|
|
131
131
|
assert_equal String, deal.to_hash["N"].first.class
|
132
132
|
end
|
133
133
|
end
|
134
|
+
|
135
|
+
class TestDealSort < Test::Unit::TestCase
|
136
|
+
def setup
|
137
|
+
@deal = Bridge::Deal.new({ "N" => ["SK", "S9", "S7", "S6", "S4", "HA", "HJ", "H3", "H2", "D7", "D2", "C6", "C3"],
|
138
|
+
"E" => ["SA", "SQ", "SJ", "ST", "S2", "DA", "DK", "DT", "D9", "D8", "D5", "CK", "CJ"],
|
139
|
+
"S" => ["S8", "S5", "S3", "HK", "HQ", "HT", "H8", "H4", "DQ", "D3", "CQ", "C4", "C2"],
|
140
|
+
"W" => ["H9", "H7", "H6", "H5", "DJ", "D6", "D4", "CA", "CT", "C9", "C8", "C7", "C5"] })
|
141
|
+
end
|
142
|
+
|
143
|
+
test "split cards by color for given direction" do
|
144
|
+
expected = { "S" => @deal.n.select { |c| c.suit == "S" },
|
145
|
+
"H" => @deal.n.select { |c| c.suit == "H" },
|
146
|
+
"D" => @deal.n.select { |c| c.suit == "D" },
|
147
|
+
"C" => @deal.n.select { |c| c.suit == "C" } }
|
148
|
+
assert_equal expected, @deal.send(:split_colors, "N")
|
149
|
+
end
|
150
|
+
|
151
|
+
test "return colors as key only if cards are present on hand" do
|
152
|
+
expected = { "S" => @deal.e.select { |c| c.suit == "S" },
|
153
|
+
"D" => @deal.e.select { |c| c.suit == "D" },
|
154
|
+
"C" => @deal.e.select { |c| c.suit == "C" } }
|
155
|
+
assert_equal expected, @deal.send(:split_colors, "E")
|
156
|
+
end
|
157
|
+
|
158
|
+
test "return sorted 4 colors" do
|
159
|
+
assert_equal ["S", "H", "C", "D"], @deal.send(:sort_colors, ["S", "H", "D", "C"])
|
160
|
+
assert_equal ["S", "H", "C", "D"], @deal.send(:sort_colors, ["H", "D", "S", "C"])
|
161
|
+
assert_equal ["S", "H", "C", "D"], @deal.send(:sort_colors, ["D", "S", "C", "H"])
|
162
|
+
end
|
163
|
+
|
164
|
+
test "return sorted 3 colors" do
|
165
|
+
assert_equal ["S", "H", "C"], @deal.send(:sort_colors, ["S", "H", "C"])
|
166
|
+
assert_equal ["H", "C", "D"], @deal.send(:sort_colors, ["H", "D", "C"])
|
167
|
+
assert_equal ["H", "S", "D"], @deal.send(:sort_colors, ["S", "H", "D"])
|
168
|
+
assert_equal ["S", "D", "C"], @deal.send(:sort_colors, ["S", "D", "C"])
|
169
|
+
end
|
170
|
+
|
171
|
+
test "return sorted 2 colors" do
|
172
|
+
assert_equal ["S", "H"], @deal.send(:sort_colors, ["S", "H"])
|
173
|
+
assert_equal ["S", "D"], @deal.send(:sort_colors, ["S", "D"])
|
174
|
+
assert_equal ["C", "D"], @deal.send(:sort_colors, ["D", "C"])
|
175
|
+
# assert_equal ["H", "C"], @deal.sort_colors(["H", "C"])
|
176
|
+
end
|
177
|
+
|
178
|
+
test "return sorted 4 colors with trump" do
|
179
|
+
assert_equal ["S", "H", "C", "D"], @deal.send(:sort_colors, ["S", "H", "D", "C"], "S")
|
180
|
+
assert_equal ["H", "S", "D", "C"], @deal.send(:sort_colors, ["H", "D", "S", "C"], "H")
|
181
|
+
assert_equal ["D", "S", "H", "C"], @deal.send(:sort_colors, ["D", "S", "C", "H"], "D")
|
182
|
+
assert_equal ["C", "H", "S", "D"], @deal.send(:sort_colors, ["D", "S", "C", "H"], "C")
|
183
|
+
end
|
184
|
+
|
185
|
+
test "return sorted 3 colors with trump" do
|
186
|
+
assert_equal ["S", "H", "C"], @deal.send(:sort_colors, ["S", "H", "C"], "S")
|
187
|
+
assert_equal ["H", "S", "C"], @deal.send(:sort_colors, ["S", "H", "C"], "H")
|
188
|
+
assert_equal ["S", "H", "D"], @deal.send(:sort_colors, ["S", "H", "D"], "S")
|
189
|
+
assert_equal ["D", "S", "H"], @deal.send(:sort_colors, ["S", "H", "D"], "D")
|
190
|
+
end
|
191
|
+
|
192
|
+
test "return sorted 2 colors with trump" do
|
193
|
+
assert_equal ["S", "H"], @deal.send(:sort_colors, ["S", "H"], "S")
|
194
|
+
assert_equal ["H", "S"], @deal.send(:sort_colors, ["S", "H"], "H")
|
195
|
+
assert_equal ["C", "S"], @deal.send(:sort_colors, ["S", "C"], "C")
|
196
|
+
assert_equal ["D", "H"], @deal.send(:sort_colors, ["H", "D"], "D")
|
197
|
+
end
|
198
|
+
|
199
|
+
test "sort hands by colors" do
|
200
|
+
expected = {
|
201
|
+
"N" => ["SK", "S9", "S7", "S6", "S4", "HA", "HJ", "H3", "H2", "C6", "C3", "D7", "D2"],
|
202
|
+
"E" => ["SA", "SQ", "SJ", "ST", "S2", "DA", "DK", "DT", "D9", "D8", "D5", "CK", "CJ"],
|
203
|
+
"S" => ["S8", "S5", "S3", "HK", "HQ", "HT", "H8", "H4", "CQ", "C4", "C2", "DQ", "D3"],
|
204
|
+
"W" => ["H9", "H7", "H6", "H5", "CA", "CT", "C9", "C8", "C7", "C5", "DJ", "D6", "D4"]
|
205
|
+
}
|
206
|
+
assert_equal expected, @deal.sort_by_color!.to_hash
|
207
|
+
end
|
208
|
+
|
209
|
+
test "sort hands by colors with trump" do
|
210
|
+
expected = {
|
211
|
+
"N" => ["C6", "C3", "HA", "HJ", "H3", "H2", "SK", "S9", "S7", "S6", "S4", "D7", "D2"],
|
212
|
+
"E" => ["CK", "CJ", "DA", "DK", "DT", "D9", "D8", "D5", "SA", "SQ", "SJ", "ST", "S2"],
|
213
|
+
"S" => ["CQ", "C4", "C2", "HK", "HQ", "HT", "H8", "H4", "S8", "S5", "S3", "DQ", "D3"],
|
214
|
+
"W" => ["CA", "CT", "C9", "C8", "C7", "C5", "H9", "H7", "H6", "H5", "DJ", "D6", "D4"]
|
215
|
+
}
|
216
|
+
assert_equal expected, @deal.sort_by_color!("C").to_hash
|
217
|
+
end
|
218
|
+
|
219
|
+
test "not modify hands if sorted by color without !" do
|
220
|
+
old_deal = @deal.to_hash
|
221
|
+
@deal.sort_by_color
|
222
|
+
assert_equal old_deal, @deal.to_hash
|
223
|
+
end
|
224
|
+
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
version: 0.0.
|
8
|
+
- 23
|
9
|
+
version: 0.0.23
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- "Jakub Ku\xC5\xBAma"
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-03-
|
17
|
+
date: 2010-03-28 00:00:00 +01:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|