回答編集履歴
5
Update expression
answer
CHANGED
@@ -347,7 +347,8 @@
|
|
347
347
|
> count_i = 1,1,2,2,1
|
348
348
|
> count_j = 1,2,2,1,1,2,2,1,1,1,1,1,1,1,1,1,2,2
|
349
349
|
|
350
|
+
この、**別々の統計**を取るような認識が正しくありません、
|
350
|
-
|
351
|
+
次のように**組み合わせ**でとらえる必要があります:
|
351
352
|
|
352
353
|
-(10,8,11,11,4)の場合-
|
353
354
|
|
4
Add fourth expression
answer
CHANGED
@@ -322,4 +322,67 @@
|
|
322
322
|
NO PAIR
|
323
323
|
---------------------------------
|
324
324
|
TWO PAIR
|
325
|
+
```
|
326
|
+
|
327
|
+
### `count_i` と `count_j` による役の評価について
|
328
|
+
|
329
|
+
> なぜXの数字を除いた手札×4を作ることによって、
|
330
|
+
> カードXでペアになっていたもの(11,11)を除けるのでしょうか?
|
331
|
+
>
|
332
|
+
> -(10,8,11,11,4)の場合-
|
333
|
+
> count_i = 1,1,2,2,1
|
334
|
+
> count_j = 1,2,2,1,1,2,2,1,1,1,1,1,1,1,1,1,2,2
|
335
|
+
>
|
336
|
+
> if count_i ==2 and count_j < 2
|
337
|
+
> この役はワンペアですが、
|
338
|
+
> count_j == 2となるのでツーペアになると思ったのですが、
|
339
|
+
> なぜcount_j < 2となるのでしょうか?
|
340
|
+
|
341
|
+
上記 [残りの手札を作る理由] [検証] の実行結果で見たように、
|
342
|
+
役の判定において `count_i` と `count_j` は
|
343
|
+
「**別々の統計**が評価されている」のではなく、
|
344
|
+
「**組み合わせ**ごとに評価されています」
|
345
|
+
|
346
|
+
> -(10,8,11,11,4)の場合-
|
347
|
+
> count_i = 1,1,2,2,1
|
348
|
+
> count_j = 1,2,2,1,1,2,2,1,1,1,1,1,1,1,1,1,2,2
|
349
|
+
|
350
|
+
この認識は正しくありません、次のようにとらえる必要があります:
|
351
|
+
|
352
|
+
-(10,8,11,11,4)の場合-
|
353
|
+
|
354
|
+
`count_i`|`count_j`|役
|
355
|
+
---|---
|
356
|
+
1|1|NO PAIR
|
357
|
+
1|1|NO PAIR
|
358
|
+
1|2|NO PAIR
|
359
|
+
1|2|NO PAIR
|
360
|
+
1|1|NO PAIR
|
361
|
+
1|1|NO PAIR
|
362
|
+
1|1|NO PAIR
|
363
|
+
1|2|NO PAIR
|
364
|
+
1|2|NO PAIR
|
365
|
+
1|1|NO PAIR
|
366
|
+
2|1|ONE PAIR
|
367
|
+
2|1|ONE PAIR
|
368
|
+
2|2|TWO PAIR
|
369
|
+
2|2|TWO PAIR
|
370
|
+
2|1|ONE PAIR
|
371
|
+
2|1|ONE PAIR
|
372
|
+
2|1|ONE PAIR
|
373
|
+
2|2|TWO PAIR
|
374
|
+
2|2|TWO PAIR
|
375
|
+
2|1|ONE PAIR
|
376
|
+
1|1|NO PAIR
|
377
|
+
1|1|NO PAIR
|
378
|
+
1|2|NO PAIR
|
379
|
+
1|2|NO PAIR
|
380
|
+
1|1|NO PAIR
|
381
|
+
|
382
|
+
最後に最大の役を調べると、`TWO PAIR` となります
|
383
|
+
|
384
|
+
最大の役を調べているコードは次の箇所です:
|
385
|
+
|
386
|
+
```python
|
387
|
+
result = max(results)
|
325
388
|
```
|
3
Add third investigation
answer
CHANGED
@@ -17,7 +17,7 @@
|
|
17
17
|
left_hands.append(n)
|
18
18
|
```
|
19
19
|
|
20
|
-
## 実験
|
20
|
+
### 実験
|
21
21
|
|
22
22
|
変数の変化を確認するために、内包表記を `for` と `if` のブロックに書き換えて
|
23
23
|
`print()` を追加してみましょう:
|
@@ -105,6 +105,8 @@
|
|
105
105
|
|
106
106
|
## 追記
|
107
107
|
|
108
|
+
### `count_j` が必要な理由
|
109
|
+
|
108
110
|
> その次にleft_handsの4個のリストをforで回してjにいれて、
|
109
111
|
> list_handsの値(10,8,11,11,4)にjがいくつ含まれているのかカウントしていますが、
|
110
112
|
> なぜcount_jが必要なのでしょうか??
|
@@ -146,4 +148,178 @@
|
|
146
148
|
results.append(5) # FULL HOUSE
|
147
149
|
else:
|
148
150
|
results.append(0) # NO PAIR
|
151
|
+
```
|
152
|
+
|
153
|
+
### 残りの手札を作る理由
|
154
|
+
|
155
|
+
> なぜ カード X の数字を除いた残りの手札、を作る必要があるのでしょうか?
|
156
|
+
|
157
|
+
もし、`別の数`をいくつ含む処理の前に
|
158
|
+
`カード X` の数字を除いた残りの手札を作らなければ、
|
159
|
+
`カード Y` を選ぶときに
|
160
|
+
`カード X` と同じ数字を選んでしまう可能性があります
|
161
|
+
すると、たとえば `ONE PAIR` でも `TWO PAIR` と判定されてしまいます
|
162
|
+
|
163
|
+
例では 5 枚のカードとして `10` `8` `11` `11` `4` が与えられています
|
164
|
+
ここで、`カード X` も`カード Y` も `11` を選んでしまうと
|
165
|
+
`11` の枚数は 2 枚なので判定が `TWO PAIR` になってしまいます
|
166
|
+
|
167
|
+
#### 実験
|
168
|
+
|
169
|
+
`list_hands` ではなく `left_hands` から`カード Y` を選ぶとどうなるか見てみましょう:
|
170
|
+
|
171
|
+
```python
|
172
|
+
def check_hand(a,b,c,d,e):
|
173
|
+
list_hands = [a,b,c,d,e]
|
174
|
+
dict_hands = {0 : "NO PAIR", 1 : "ONE PAIR", 2 : "TWO PAIR", 3 : "THREE CARD", 4 : "FOUR CARD", 5 : "FULL HOUSE"}
|
175
|
+
results = []
|
176
|
+
|
177
|
+
for i in list_hands:#カードXを選ぶ
|
178
|
+
count_i = list_hands.count(i)#手札の中にあるカードXの個数をカウント
|
179
|
+
|
180
|
+
# left_hands = [n for n in list_hands if n != i] #Xの数字を除いた残りの手札
|
181
|
+
# left_hands = []
|
182
|
+
# for n in list_hands:
|
183
|
+
# # ↓ この時点での n, i の値を確認します
|
184
|
+
# print('n, i = ' + str(n) + ', ' + str(i))
|
185
|
+
# if n != i:
|
186
|
+
# left_hands.append(n)
|
187
|
+
# # ↓ left_hands の値を確認します
|
188
|
+
# print('left_hands = ' + str(left_hands))
|
189
|
+
# print('---------------------------------')
|
190
|
+
# for j in left_hands:#X以外の数字のカードからカードYを選ぶ
|
191
|
+
for j in list_hands:#X以外の数字のカードからカードYを選ぶ
|
192
|
+
count_j = list_hands.count(j)#手札の中にあるカードYの個数をカウント
|
193
|
+
print("カードX, Y = " + str(i) + ", " + str(j))
|
194
|
+
print("個数 X, Y = " + str(count_i) + ", " + str(count_j))
|
195
|
+
if count_i == 2 and count_j < 2:
|
196
|
+
print("ONE PAIR")
|
197
|
+
results.append(1)
|
198
|
+
elif count_i == 2 and count_j == 2:
|
199
|
+
print("TWO PAIR")
|
200
|
+
results.append(2)
|
201
|
+
elif count_i == 3 and count_j == 1:
|
202
|
+
print("THREE CARD")
|
203
|
+
results.append(3)
|
204
|
+
elif count_i == 4 and count_j == 1 :
|
205
|
+
print("FOUR CARD")
|
206
|
+
results.append(4)
|
207
|
+
elif count_i == 3 and count_j == 2 :
|
208
|
+
print("FULL HOUSE")
|
209
|
+
results.append(5)
|
210
|
+
else:
|
211
|
+
print("NO PAIR")
|
212
|
+
results.append(0)
|
213
|
+
print('---------------------------------')
|
214
|
+
result = max(results)
|
215
|
+
return dict_hands[result]
|
216
|
+
|
217
|
+
print(check_hand(10,8,11,11,4))
|
218
|
+
```
|
219
|
+
|
220
|
+
実行結果:
|
221
|
+
|
222
|
+
```console
|
223
|
+
$ python test.py
|
224
|
+
カードX, Y = 10, 10
|
225
|
+
個数 X, Y = 1, 1
|
226
|
+
NO PAIR
|
227
|
+
---------------------------------
|
228
|
+
カードX, Y = 10, 8
|
229
|
+
個数 X, Y = 1, 1
|
230
|
+
NO PAIR
|
231
|
+
---------------------------------
|
232
|
+
カードX, Y = 10, 11
|
233
|
+
個数 X, Y = 1, 2
|
234
|
+
NO PAIR
|
235
|
+
---------------------------------
|
236
|
+
カードX, Y = 10, 11
|
237
|
+
個数 X, Y = 1, 2
|
238
|
+
NO PAIR
|
239
|
+
---------------------------------
|
240
|
+
カードX, Y = 10, 4
|
241
|
+
個数 X, Y = 1, 1
|
242
|
+
NO PAIR
|
243
|
+
---------------------------------
|
244
|
+
カードX, Y = 8, 10
|
245
|
+
個数 X, Y = 1, 1
|
246
|
+
NO PAIR
|
247
|
+
---------------------------------
|
248
|
+
カードX, Y = 8, 8
|
249
|
+
個数 X, Y = 1, 1
|
250
|
+
NO PAIR
|
251
|
+
---------------------------------
|
252
|
+
カードX, Y = 8, 11
|
253
|
+
個数 X, Y = 1, 2
|
254
|
+
NO PAIR
|
255
|
+
---------------------------------
|
256
|
+
カードX, Y = 8, 11
|
257
|
+
個数 X, Y = 1, 2
|
258
|
+
NO PAIR
|
259
|
+
---------------------------------
|
260
|
+
カードX, Y = 8, 4
|
261
|
+
個数 X, Y = 1, 1
|
262
|
+
NO PAIR
|
263
|
+
---------------------------------
|
264
|
+
カードX, Y = 11, 10
|
265
|
+
個数 X, Y = 2, 1
|
266
|
+
ONE PAIR
|
267
|
+
---------------------------------
|
268
|
+
カードX, Y = 11, 8
|
269
|
+
個数 X, Y = 2, 1
|
270
|
+
ONE PAIR
|
271
|
+
---------------------------------
|
272
|
+
カードX, Y = 11, 11
|
273
|
+
個数 X, Y = 2, 2
|
274
|
+
TWO PAIR
|
275
|
+
---------------------------------
|
276
|
+
カードX, Y = 11, 11
|
277
|
+
個数 X, Y = 2, 2
|
278
|
+
TWO PAIR
|
279
|
+
---------------------------------
|
280
|
+
カードX, Y = 11, 4
|
281
|
+
個数 X, Y = 2, 1
|
282
|
+
ONE PAIR
|
283
|
+
---------------------------------
|
284
|
+
カードX, Y = 11, 10
|
285
|
+
個数 X, Y = 2, 1
|
286
|
+
ONE PAIR
|
287
|
+
---------------------------------
|
288
|
+
カードX, Y = 11, 8
|
289
|
+
個数 X, Y = 2, 1
|
290
|
+
ONE PAIR
|
291
|
+
---------------------------------
|
292
|
+
カードX, Y = 11, 11
|
293
|
+
個数 X, Y = 2, 2
|
294
|
+
TWO PAIR
|
295
|
+
---------------------------------
|
296
|
+
カードX, Y = 11, 11
|
297
|
+
個数 X, Y = 2, 2
|
298
|
+
TWO PAIR
|
299
|
+
---------------------------------
|
300
|
+
カードX, Y = 11, 4
|
301
|
+
個数 X, Y = 2, 1
|
302
|
+
ONE PAIR
|
303
|
+
---------------------------------
|
304
|
+
カードX, Y = 4, 10
|
305
|
+
個数 X, Y = 1, 1
|
306
|
+
NO PAIR
|
307
|
+
---------------------------------
|
308
|
+
カードX, Y = 4, 8
|
309
|
+
個数 X, Y = 1, 1
|
310
|
+
NO PAIR
|
311
|
+
---------------------------------
|
312
|
+
カードX, Y = 4, 11
|
313
|
+
個数 X, Y = 1, 2
|
314
|
+
NO PAIR
|
315
|
+
---------------------------------
|
316
|
+
カードX, Y = 4, 11
|
317
|
+
個数 X, Y = 1, 2
|
318
|
+
NO PAIR
|
319
|
+
---------------------------------
|
320
|
+
カードX, Y = 4, 4
|
321
|
+
個数 X, Y = 1, 1
|
322
|
+
NO PAIR
|
323
|
+
---------------------------------
|
324
|
+
TWO PAIR
|
149
325
|
```
|
2
Add comment
answer
CHANGED
@@ -135,15 +135,15 @@
|
|
135
135
|
|
136
136
|
```python
|
137
137
|
if count_i == 2 and count_j < 2:
|
138
|
-
results.append(1)
|
138
|
+
results.append(1) # ONE PAIR
|
139
139
|
elif count_i == 2 and count_j == 2:
|
140
|
-
results.append(2)
|
140
|
+
results.append(2) # TWO PAIR
|
141
141
|
elif count_i == 3 and count_j == 1:
|
142
|
-
results.append(3)
|
142
|
+
results.append(3) # THREE CARD
|
143
143
|
elif count_i == 4 and count_j == 1:
|
144
|
-
results.append(4)
|
144
|
+
results.append(4) # FOUR CARD
|
145
145
|
elif count_i == 3 and count_j == 2:
|
146
|
-
results.append(5)
|
146
|
+
results.append(5) # FULL HOUSE
|
147
147
|
else:
|
148
|
-
results.append(0)
|
148
|
+
results.append(0) # NO PAIR
|
149
149
|
```
|
1
Add second expression
answer
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
## 元の回答
|
2
|
+
|
1
3
|
```python
|
2
4
|
left_hands = [n for n in list_hands if n != i] #Xの数字を除いた残りの手札
|
3
5
|
```
|
@@ -99,4 +101,49 @@
|
|
99
101
|
left_hands = [10, 8, 11, 11]
|
100
102
|
---------------------------------
|
101
103
|
ONE PAIR
|
104
|
+
```
|
105
|
+
|
106
|
+
## 追記
|
107
|
+
|
108
|
+
> その次にleft_handsの4個のリストをforで回してjにいれて、
|
109
|
+
> list_handsの値(10,8,11,11,4)にjがいくつ含まれているのかカウントしていますが、
|
110
|
+
> なぜcount_jが必要なのでしょうか??
|
111
|
+
> 3週目の11の場合、
|
112
|
+
> list_handsにjの値がいくつあるかカウントして、
|
113
|
+
> 1,2,2,1,1,2,2~がcount_jに代入される→
|
114
|
+
|
115
|
+
「`別の数`をちょうど 2 つ含」んでいないかを調べるためです
|
116
|
+
|
117
|
+
この問題は次のことを求めています:
|
118
|
+
|
119
|
+
> 配られた5枚のカードが、以下のいずれの役に該当するかを調べてください。
|
120
|
+
|
121
|
+
役名|条件
|
122
|
+
---|---
|
123
|
+
FULL HOUSE|`ある数`をちょうど 3 つと、`別の数`をちょうど 2 つ含む
|
124
|
+
FOUR CARD|`ある数`をちょうど 4 つ含む
|
125
|
+
THREE CARD|`ある数`をちょうど 3 つ含む
|
126
|
+
TWO PAIR|`ある数`をちょうど 2 つと、`別の数`をちょうど 2 つ含む
|
127
|
+
ONE PAIR|`ある数`をちょうど 2 つ含む
|
128
|
+
|
129
|
+
この Python コードでは、
|
130
|
+
`ある数`をいくつ含むかを調べて `count_i` に代入したあと、
|
131
|
+
`別の数`をいくつ含むかを調べて `count_j` に代入しています
|
132
|
+
|
133
|
+
そして、その `count_i`, `count_j` を使って、
|
134
|
+
次の `if`, `elif`, `else` ブロックで役の判定を行っています:
|
135
|
+
|
136
|
+
```python
|
137
|
+
if count_i == 2 and count_j < 2:
|
138
|
+
results.append(1)
|
139
|
+
elif count_i == 2 and count_j == 2:
|
140
|
+
results.append(2)
|
141
|
+
elif count_i == 3 and count_j == 1:
|
142
|
+
results.append(3)
|
143
|
+
elif count_i == 4 and count_j == 1:
|
144
|
+
results.append(4)
|
145
|
+
elif count_i == 3 and count_j == 2:
|
146
|
+
results.append(5)
|
147
|
+
else:
|
148
|
+
results.append(0)
|
102
149
|
```
|