回答編集履歴

6

修正

2017/04/16 13:02

投稿

退会済みユーザー
test CHANGED
@@ -136,25 +136,25 @@
136
136
 
137
137
  case str
138
138
 
139
- when "RoyalStraightFlush"; return 9
139
+ when "RoyalStraightFlush"; return 0
140
-
140
+
141
- when "StraightFlush"; return 8
141
+ when "StraightFlush"; return 1
142
-
142
+
143
- when "FourOfAKind"; return 7
143
+ when "FourOfAKind"; return 2
144
-
144
+
145
- when "FullHouse"; return 6
145
+ when "FullHouse"; return 3
146
-
146
+
147
- when "Flush"; return 5
147
+ when "Flush"; return 4
148
-
148
+
149
- when "Straight"; return 4
149
+ when "Straight"; return 5
150
-
150
+
151
- when "ThreeOfAKind"; return 3
151
+ when "ThreeOfAKind"; return 6
152
-
152
+
153
- when "TwoPair"; return 2
153
+ when "TwoPair"; return 7
154
-
154
+
155
- when "OnePair"; return 1
155
+ when "OnePair"; return 8
156
-
156
+
157
- when "NoPair"; return 0
157
+ when "NoPair"; return 9
158
158
 
159
159
  end
160
160
 
@@ -188,7 +188,7 @@
188
188
 
189
189
 
190
190
 
191
- dis.each_slice(3).to_a.sort_by{|e| e[2]}.reverse.each_with_index do |element, i|
191
+ dis.each_slice(3).to_a.sort_by{|e| e[2]}.each_with_index do |element, i|
192
192
 
193
193
  puts element[0]
194
194
 

5

修正

2017/04/16 13:02

投稿

退会済みユーザー
test CHANGED
@@ -128,13 +128,11 @@
128
128
 
129
129
  return "NoPair"
130
130
 
131
-
132
-
133
- end
131
+ end
134
-
135
-
136
-
132
+
133
+
134
+
137
- def score(str)
135
+ def Score(str)
138
136
 
139
137
  case str
140
138
 
@@ -184,7 +182,7 @@
184
182
 
185
183
  dis << "hand:\s#{answer}"
186
184
 
187
- dis << score(answer)
185
+ dis << Score(answer)
188
186
 
189
187
  end
190
188
 

4

修正

2017/04/16 08:56

投稿

退会済みユーザー
test CHANGED
@@ -62,7 +62,7 @@
62
62
 
63
63
 
64
64
 
65
- return "Nopair" if array.length != 5
65
+ return "NoPair" if array.length != 5
66
66
 
67
67
 
68
68
 

3

修正

2017/04/16 08:54

投稿

退会済みユーザー
test CHANGED
@@ -212,4 +212,4 @@
212
212
 
213
213
  [ポーカーの役判定プログラム(C#)](http://amonution.sblo.jp/article/57308421.html)
214
214
 
215
- 私のコードは参考にしたページをRubyで書き直しただけのものです。
215
+ 私のコードは参考にしたページに書いてあるC#のコードをRubyで書き直しただけのものです。

2

修正

2017/04/16 08:53

投稿

退会済みユーザー
test CHANGED
@@ -211,3 +211,5 @@
211
211
  参考
212
212
 
213
213
  [ポーカーの役判定プログラム(C#)](http://amonution.sblo.jp/article/57308421.html)
214
+
215
+ 私のコードは参考にしたページをRubyで書き直しただけのものです。

1

修正

2017/04/16 08:53

投稿

退会済みユーザー
test CHANGED
@@ -1 +1,213 @@
1
1
  やくに点数をつけてその大小を比較するというのはどうでしょうか?
2
+
3
+
4
+
5
+ ```Ruby
6
+
7
+ #encoding: utf-8
8
+
9
+
10
+
11
+ =begin
12
+
13
+ ポーカーのやくはんていプログラム
14
+
15
+ =end
16
+
17
+
18
+
19
+ def PokerHand_Judge(array)
20
+
21
+ return "NoPair" if array.length < 2
22
+
23
+
24
+
25
+ mark = []
26
+
27
+ num = []
28
+
29
+
30
+
31
+ array.each do |element|
32
+
33
+ mark << element.slice!(0)
34
+
35
+ num << element.to_i
36
+
37
+ end
38
+
39
+
40
+
41
+ mark.uniq!
42
+
43
+
44
+
45
+ tmp = num.group_by{|e| e}.map{|key, val| val}.map{|e| e.length}.sort
46
+
47
+
48
+
49
+ case tmp
50
+
51
+ when [1, 1, 1, 2]; return "OnePair"
52
+
53
+ when [1, 2, 2]; return "TwoPair"
54
+
55
+ when [1, 1, 3]; return "ThreeOfAKind"
56
+
57
+ when [2, 3]; return "FullHouse"
58
+
59
+ when [1, 4]; return "FourOfAKind"
60
+
61
+ end
62
+
63
+
64
+
65
+ return "Nopair" if array.length != 5
66
+
67
+
68
+
69
+ straight = false
70
+
71
+ royal = false
72
+
73
+
74
+
75
+ min = num.min
76
+
77
+ max = num.max
78
+
79
+
80
+
81
+ if max - min <= 4
82
+
83
+ straight = true
84
+
85
+ end
86
+
87
+
88
+
89
+ if straight == false
90
+
91
+ min = 14 if num.min == 1
92
+
93
+ if max - min <= 4
94
+
95
+ straight = true
96
+
97
+ royal = true
98
+
99
+ end
100
+
101
+ end
102
+
103
+
104
+
105
+ flush = false
106
+
107
+
108
+
109
+ if mark.length == 1
110
+
111
+ flush = true
112
+
113
+ end
114
+
115
+
116
+
117
+ if royal && flush; return "RoyalStraightFlush"
118
+
119
+ elsif straight && flush; return "StraightFlush"
120
+
121
+ elsif flush; return "Flush"
122
+
123
+ elsif straight; return "Straight"
124
+
125
+ end
126
+
127
+
128
+
129
+ return "NoPair"
130
+
131
+
132
+
133
+ end
134
+
135
+
136
+
137
+ def score(str)
138
+
139
+ case str
140
+
141
+ when "RoyalStraightFlush"; return 9
142
+
143
+ when "StraightFlush"; return 8
144
+
145
+ when "FourOfAKind"; return 7
146
+
147
+ when "FullHouse"; return 6
148
+
149
+ when "Flush"; return 5
150
+
151
+ when "Straight"; return 4
152
+
153
+ when "ThreeOfAKind"; return 3
154
+
155
+ when "TwoPair"; return 2
156
+
157
+ when "OnePair"; return 1
158
+
159
+ when "NoPair"; return 0
160
+
161
+ end
162
+
163
+ end
164
+
165
+
166
+
167
+ str = "S8 S7 H6 H5 S4 H1 H13 H12 H11 H10\n"
168
+
169
+
170
+
171
+ cards = str.chomp.to_s.split("\s").each_slice(5).to_a
172
+
173
+
174
+
175
+ dis = []
176
+
177
+
178
+
179
+ cards.each do |element|
180
+
181
+ dis << "cards:\s#{element.join(",")}"
182
+
183
+ answer = PokerHand_Judge(element)
184
+
185
+ dis << "hand:\s#{answer}"
186
+
187
+ dis << score(answer)
188
+
189
+ end
190
+
191
+
192
+
193
+ dis.each_slice(3).to_a.sort_by{|e| e[2]}.reverse.each_with_index do |element, i|
194
+
195
+ puts element[0]
196
+
197
+ puts element[1]
198
+
199
+ if i.zero?
200
+
201
+ puts "best: true"
202
+
203
+ end
204
+
205
+ puts ""
206
+
207
+ end
208
+
209
+ ```
210
+
211
+ 参考
212
+
213
+ [ポーカーの役判定プログラム(C#)](http://amonution.sblo.jp/article/57308421.html)