@こけしねこ ```javascript
function checkDuplicateCards(cards) {
// カードの絵柄を数える
const counts = {};
for (const card of cards) {
counts[card] = (counts[card] || 0) + 1;
}
// 3人以上が同じカードを持っているか判定
for (const card in counts) {
if (counts[card] >= 3) {
return true;
}
}
return false;
}
// テスト例
const cards1 = ["A", "B", "A", "C", "B", "A", "C"];
console.log(checkDuplicateCards(cards1)); // true (Aが3枚、Bが2枚、Cが1枚)
const cards2 = ["A", "B", "C", "D"];
console.log(checkDuplicateCards(cards2)); // false (全て異なる)
const cards3 = ["A", "B", "A", "C", "B"];
console.log(checkDuplicateCards(cards3)); // true (Aが2枚、Bが2枚、Cが1枚)
```
**解説:**
1. **`checkDuplicateCards(cards)` 関数:**
- 入力: カードの配列 `cards`
- 目的: 3人以上が同じカードを持っているか判定し、`true` または `false` を返す。
2. **`counts` オブジェクト:**
- `counts` は、各カードの出現回数を格納するためのオブジェクトです。
- キーはカードの絵柄(文字列)であり、値は出現回数です。
3. **`for...of` ループ:**
- `cards` 配列を `for...of` ループでイテレーションし、各カードの絵柄を `card` に代入します。
4. **`counts[card] = (counts[card] || 0) + 1;`:**
- `counts[card] || 0`: `counts` オブジェクトに `card` がキーとして存在しない場合、`0` を返します(デフォルト値)。
- `+ 1`: `card` の出現回数を 1 増やします。
- `counts[card] = ...`: `card` が `counts` オブジェクトのキーとして存在する場合、その値を 1 増やします。存在しない場合は、`counts[card]` を 1 で初期化します。
5. **`for...in` ループ:**
- `counts` オブジェクトのキー(カードの絵柄)を `for...in` ループでイテレーションします。
- `for...in` ループは、オブジェクトのキーを走査するために使用されます。
6. `counts[card] >= 3`: 3人以上が同じカードを持っている場合にtrueを返します。
**使い方:**
1. `checkDuplicateCards()` 関数に、カードの絵柄の配列を渡します。
2. 関数は、3人以上が同じカードを持っているかどうかを判定し、`true` (あり) または `false` (ない) を返します。
このコードは、JavaScriptで書いてみました。実行する際は、環境に合わせて調整してください。