tbpgr_utils 0.0.69 → 0.0.70
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.
- data/README.md +39 -0
- data/lib/simple_tournament.rb +57 -0
- data/lib/tbpgr_utils/version.rb +1 -1
- data/spec/simple_tournament_spec.rb +159 -0
- metadata +15 -12
data/README.md
CHANGED
@@ -92,6 +92,7 @@ Or install it yourself as:
|
|
92
92
|
|[TbpgrUtils Object#unless_guard](#objectunless_guard) |data type check for unless_guard |
|
93
93
|
|[TbpgrUtils Object#my_methods](#objectmy_methods) |return public/protected/private self define methods |
|
94
94
|
|[TbpgrUtils Object#to_bool](#objectto_bool) |syntax sugar of !!. convert [false, nil] => fasel, other => true. |
|
95
|
+
|[SimpleTournament](#simpletournament) |simple tournament |
|
95
96
|
|[TbpgrUtils String#comma_to_a](#stringcomma_to_a) |comma-format string to array |
|
96
97
|
|[TbpgrUtils String#hyphen_to_a](#stringhyphen_to_a) |hyphen-format string to array |
|
97
98
|
|[TbpgrUtils String#justify_table](#stringjustify_table) |justify pipe format table string |
|
@@ -2192,6 +2193,43 @@ p 0.to_bool # => true
|
|
2192
2193
|
|
2193
2194
|
[back to list](#list)
|
2194
2195
|
|
2196
|
+
### SimpleTournament
|
2197
|
+
init tournament
|
2198
|
+
|
2199
|
+
~~~ruby
|
2200
|
+
require 'simple_tournament'
|
2201
|
+
|
2202
|
+
st = SimpleTournament.new 3
|
2203
|
+
print st.tournament # => [[nil], [nil, nil], [nil, nil]]
|
2204
|
+
~~~
|
2205
|
+
|
2206
|
+
apply challengers
|
2207
|
+
|
2208
|
+
~~~ruby
|
2209
|
+
require 'simple_tournament'
|
2210
|
+
|
2211
|
+
st = SimpleTournament.new 3
|
2212
|
+
st.apply_challengers [*1..3]
|
2213
|
+
print st.tournament # => [[nil], [1, nil], [3, 2]]
|
2214
|
+
~~~
|
2215
|
+
|
2216
|
+
start tournament match
|
2217
|
+
|
2218
|
+
~~~ruby
|
2219
|
+
require 'simple_tournament'
|
2220
|
+
|
2221
|
+
st = SimpleTournament.new 3
|
2222
|
+
st.apply_challengers [*1..3]
|
2223
|
+
st.start_match Proc.new { |one, other|
|
2224
|
+
rets = []
|
2225
|
+
winner = (one > other ? one : other)
|
2226
|
+
rets << winner
|
2227
|
+
rets << "#{one} : #{other} 's winner is #{winner}"
|
2228
|
+
rets
|
2229
|
+
}
|
2230
|
+
print st.tournament # => [[3], [1, 3], [3, 2]]
|
2231
|
+
~~~
|
2232
|
+
|
2195
2233
|
### String#comma_to_a
|
2196
2234
|
space commma case
|
2197
2235
|
|
@@ -2564,6 +2602,7 @@ if you are Sublime Text2 user, you can use snippet for TbpgrUtils.
|
|
2564
2602
|
https://github.com/tbpgr/tbpgr_utils_snippets
|
2565
2603
|
|
2566
2604
|
## History
|
2605
|
+
* version 0.0.70 : add SimpleTournament
|
2567
2606
|
* version 0.0.69 : add Numeric#dozen
|
2568
2607
|
* version 0.0.68 : add Numeric#dice_back
|
2569
2608
|
* version 0.0.67 : add EvalHelper#attr_accessor_init_code
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
# SimpleTournament
|
4
|
+
class SimpleTournament
|
5
|
+
attr_reader :tournament, :number, :messages
|
6
|
+
|
7
|
+
# initialize tournament by number
|
8
|
+
def initialize(number)
|
9
|
+
@number = number
|
10
|
+
@messages = []
|
11
|
+
cnt = 0
|
12
|
+
@tournament = []
|
13
|
+
while number >= (2**cnt)
|
14
|
+
tournament << Array.new(2**cnt)
|
15
|
+
cnt += 1
|
16
|
+
end
|
17
|
+
diff = number - (2**(cnt - 1))
|
18
|
+
@tournament << Array.new(diff * 2) unless (diff == 0)
|
19
|
+
end
|
20
|
+
|
21
|
+
# apply challengers to tournament
|
22
|
+
def apply_challengers(challengers)
|
23
|
+
fail 'incorrect challengers size. challengers must equals tournament.size' unless challengers.size == @number
|
24
|
+
@tournament.reverse_each do |outer|
|
25
|
+
outer.each_with_index do |v, i|
|
26
|
+
poped = challengers.pop
|
27
|
+
return @tournament if poped.nil?
|
28
|
+
outer[i] = poped
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
# start tournament match. set result to tournament, messages
|
34
|
+
def start_match(proc)
|
35
|
+
@tournament.reverse_each.with_index do |outer, outer_index|
|
36
|
+
outer.reverse_each.with_index do |inner, inner_index|
|
37
|
+
next if inner_index.odd?
|
38
|
+
next if inner_index == outer.size - 1
|
39
|
+
rets = proc.call outer[-(inner_index + 1)], outer[-(inner_index + 2)]
|
40
|
+
winner = rets.first
|
41
|
+
@messages << rets.last
|
42
|
+
set_winner(winner, outer_index)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
private
|
48
|
+
|
49
|
+
def set_winner(winner, outer_index)
|
50
|
+
@tournament[0..-(outer_index + 1)].reverse_each do |replace_outer|
|
51
|
+
replace_outer.reverse_each.with_index do |reverse_inner, reverse_inner_index|
|
52
|
+
next unless reverse_inner.nil?
|
53
|
+
return replace_outer[-(reverse_inner_index + 1)] = winner
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
data/lib/tbpgr_utils/version.rb
CHANGED
@@ -0,0 +1,159 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
require 'simple_tournament'
|
4
|
+
|
5
|
+
describe SimpleTournament do
|
6
|
+
context :new do
|
7
|
+
cases = [
|
8
|
+
{
|
9
|
+
case_no: 1,
|
10
|
+
case_title: '3 case',
|
11
|
+
number: 3,
|
12
|
+
expected: [[nil], [nil, nil], [nil, nil]],
|
13
|
+
},
|
14
|
+
{
|
15
|
+
case_no: 2,
|
16
|
+
case_title: '4 case',
|
17
|
+
number: 4,
|
18
|
+
expected: [[nil], [nil, nil], [nil, nil, nil, nil]],
|
19
|
+
},
|
20
|
+
]
|
21
|
+
|
22
|
+
cases.each do |c|
|
23
|
+
it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
|
24
|
+
begin
|
25
|
+
case_before c
|
26
|
+
|
27
|
+
# -- given --
|
28
|
+
# nothing
|
29
|
+
|
30
|
+
# -- when --
|
31
|
+
simple_tournament = SimpleTournament.new c[:number]
|
32
|
+
|
33
|
+
# -- then --
|
34
|
+
actual = simple_tournament.tournament
|
35
|
+
expect(actual).to eq(c[:expected])
|
36
|
+
ensure
|
37
|
+
case_after c
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def case_before(c)
|
42
|
+
# implement each case before
|
43
|
+
end
|
44
|
+
|
45
|
+
def case_after(c)
|
46
|
+
# implement each case after
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
context :apply_challengers do
|
52
|
+
cases = [
|
53
|
+
{
|
54
|
+
case_no: 1,
|
55
|
+
case_title: '3 case',
|
56
|
+
number: 3,
|
57
|
+
challengers: [*1..3],
|
58
|
+
expected: [[nil], [1, nil], [3, 2]],
|
59
|
+
},
|
60
|
+
{
|
61
|
+
case_no: 2,
|
62
|
+
case_title: '4 case',
|
63
|
+
number: 4,
|
64
|
+
challengers: [*1..4],
|
65
|
+
expected: [[nil], [nil, nil], [4, 3, 2, 1]],
|
66
|
+
},
|
67
|
+
]
|
68
|
+
|
69
|
+
cases.each do |c|
|
70
|
+
it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
|
71
|
+
begin
|
72
|
+
case_before c
|
73
|
+
|
74
|
+
# -- given --
|
75
|
+
simple_tournament = SimpleTournament.new c[:number]
|
76
|
+
|
77
|
+
# -- when --
|
78
|
+
actual = simple_tournament.apply_challengers c[:challengers]
|
79
|
+
|
80
|
+
# -- then --
|
81
|
+
actual = simple_tournament.tournament
|
82
|
+
expect(actual).to eq(c[:expected])
|
83
|
+
ensure
|
84
|
+
case_after c
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
def case_before(c)
|
89
|
+
# implement each case before
|
90
|
+
end
|
91
|
+
|
92
|
+
def case_after(c)
|
93
|
+
# implement each case after
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
context :start_match do
|
99
|
+
cases = [
|
100
|
+
{
|
101
|
+
case_no: 1,
|
102
|
+
case_title: '3 case',
|
103
|
+
number: 3,
|
104
|
+
challengers: [*1..3],
|
105
|
+
proc: proc do |one, other|
|
106
|
+
rets = []
|
107
|
+
winner = (one > other ? one : other)
|
108
|
+
rets << winner
|
109
|
+
rets << "#{one} : #{other} 's winner is #{winner}"
|
110
|
+
rets
|
111
|
+
end,
|
112
|
+
expected: [[3], [1, 3], [3, 2]],
|
113
|
+
},
|
114
|
+
{
|
115
|
+
case_no: 2,
|
116
|
+
case_title: '4 case',
|
117
|
+
number: 4,
|
118
|
+
challengers: [*1..4],
|
119
|
+
proc: proc do |one, other|
|
120
|
+
rets = []
|
121
|
+
winner = (one > other ? one : other)
|
122
|
+
rets << winner
|
123
|
+
rets << "#{one} : #{other} 's winner is #{winner}"
|
124
|
+
rets
|
125
|
+
end,
|
126
|
+
expected: [[4], [4, 2], [4, 3, 2, 1]],
|
127
|
+
},
|
128
|
+
]
|
129
|
+
|
130
|
+
cases.each do |c|
|
131
|
+
it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
|
132
|
+
begin
|
133
|
+
case_before c
|
134
|
+
|
135
|
+
# -- given --
|
136
|
+
simple_tournament = SimpleTournament.new c[:number]
|
137
|
+
simple_tournament.apply_challengers c[:challengers]
|
138
|
+
|
139
|
+
# -- when --
|
140
|
+
simple_tournament.start_match c[:proc]
|
141
|
+
|
142
|
+
# -- then --
|
143
|
+
actual = simple_tournament.tournament
|
144
|
+
expect(actual).to eq(c[:expected])
|
145
|
+
ensure
|
146
|
+
case_after c
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
def case_before(c)
|
151
|
+
# implement each case before
|
152
|
+
end
|
153
|
+
|
154
|
+
def case_after(c)
|
155
|
+
# implement each case after
|
156
|
+
end
|
157
|
+
end
|
158
|
+
end
|
159
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tbpgr_utils
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.70
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-03-
|
12
|
+
date: 2014-03-18 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
16
|
-
requirement: &
|
16
|
+
requirement: &23249208 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 4.0.1
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *23249208
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: bundler
|
27
|
-
requirement: &
|
27
|
+
requirement: &23248920 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '1.3'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *23248920
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rake
|
38
|
-
requirement: &
|
38
|
+
requirement: &23248692 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *23248692
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: rspec
|
49
|
-
requirement: &
|
49
|
+
requirement: &23248368 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 2.14.1
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *23248368
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: simplecov
|
60
|
-
requirement: &
|
60
|
+
requirement: &23248068 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ~>
|
@@ -65,7 +65,7 @@ dependencies:
|
|
65
65
|
version: 0.8.2
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *23248068
|
69
69
|
description: Utilities
|
70
70
|
email:
|
71
71
|
- tbpgr@tbpgr.jp
|
@@ -159,6 +159,7 @@ files:
|
|
159
159
|
- lib/open_classes/string/to_space2_heading.rb
|
160
160
|
- lib/open_classes/string/to_space4_heading.rb
|
161
161
|
- lib/open_classes/string/to_tab_heading.rb
|
162
|
+
- lib/simple_tournament.rb
|
162
163
|
- lib/tbpgr_utils.rb
|
163
164
|
- lib/tbpgr_utils/version.rb
|
164
165
|
- lib/templatable.rb
|
@@ -235,6 +236,7 @@ files:
|
|
235
236
|
- spec/open_classes/string/to_space4_heading_spec.rb
|
236
237
|
- spec/open_classes/string/to_tab_heading_spec.rb
|
237
238
|
- spec/set_variables_code_spec.rb
|
239
|
+
- spec/simple_tournament_spec.rb
|
238
240
|
- spec/spec_helper.rb
|
239
241
|
- spec/templatable_spec.rb
|
240
242
|
- spec/template_methodable_spec.rb
|
@@ -335,6 +337,7 @@ test_files:
|
|
335
337
|
- spec/open_classes/string/to_space4_heading_spec.rb
|
336
338
|
- spec/open_classes/string/to_tab_heading_spec.rb
|
337
339
|
- spec/set_variables_code_spec.rb
|
340
|
+
- spec/simple_tournament_spec.rb
|
338
341
|
- spec/spec_helper.rb
|
339
342
|
- spec/templatable_spec.rb
|
340
343
|
- spec/template_methodable_spec.rb
|