tbpgr_utils 0.0.69 → 0.0.70

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -2,5 +2,5 @@
2
2
 
3
3
  # Tbpgr Utilities
4
4
  module TbpgrUtils
5
- VERSION = '0.0.69'
5
+ VERSION = '0.0.70'
6
6
  end
@@ -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.69
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-17 00:00:00.000000000 Z
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: &26980260 !ruby/object:Gem::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: *26980260
24
+ version_requirements: *23249208
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: bundler
27
- requirement: &26979972 !ruby/object:Gem::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: *26979972
35
+ version_requirements: *23248920
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rake
38
- requirement: &26979744 !ruby/object:Gem::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: *26979744
46
+ version_requirements: *23248692
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rspec
49
- requirement: &26979420 !ruby/object:Gem::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: *26979420
57
+ version_requirements: *23248368
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: simplecov
60
- requirement: &26979120 !ruby/object:Gem::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: *26979120
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