回答編集履歴
2
テキスト修正
test
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
あるプレイヤーに同じランクのカードが3枚配られたときに、どのスーツのカードを残すかを、そのプレイヤーは決められるのか? それとも何らかの規則によって捨てるスーツの2枚が自動的に決まるのか?という問題はありますが、いったんそこは無視したコードを作ってみました。
|
2
2
|
|
3
|
-
下記のコードでは、配列`p1hand` から同じランクのカード2枚組を捨てることで得られる配列を、最後にアンダーバーをつけた `p1hand_` という名前で作ります。(変数
|
3
|
+
下記のコードでは、配列`p1hand` から同じランクのカード2枚組を捨てることで得られる配列を、最後にアンダーバーをつけた `p1hand_` という名前で作ります。(捨てた後の配列を別の変数に入れるのは、捨てる前と後で比較をして動作確認したいからです。)
|
4
4
|
|
5
5
|
はじめに `"♠1"`といった文字列`str`から、ランクを表す整数値 `1` を返すような関数 `rank(str)`を作っておきます。`"JKR"`に対しては `0`を返すようにします。
|
6
6
|
```javascript
|
1
追記
test
CHANGED
@@ -40,3 +40,18 @@
|
|
40
40
|
- 動作確認用 👉 https://codepen.io/su507/pen/oNqeKBa?editors=0012
|
41
41
|
|
42
42
|
|
43
|
+
|
44
|
+
### 追記
|
45
|
+
|
46
|
+
オブジェクトや配列の操作などで便利なライブラリ [lodash](https://lodash.com/) を使うと、関数 `discard(hand)` を以下のように書けます。
|
47
|
+
|
48
|
+
```javascript
|
49
|
+
const discard = hand =>
|
50
|
+
_(hand).groupBy(rank)
|
51
|
+
.mapValues(discardSameRanks)
|
52
|
+
.values()
|
53
|
+
.flatten()
|
54
|
+
.value();
|
55
|
+
```
|
56
|
+
- 動作確認用 👉 https://codepen.io/su507/pen/GRxMREd?editors=0012
|
57
|
+
|