回答編集履歴

2

テキスト修正

2022/07/26 13:33

投稿

退会済みユーザー
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

追記

2022/07/26 13:10

投稿

退会済みユーザー
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
+