[コンビ]黒いジャックに飽きた.


質問する


普通のブラックジャックゲームでは、時々敗れて興味を失ったキム・コディンは、朴テテクにゲームのルールを変えて新しいカードゲームを試してみることを提案した.
新しいルールは次のとおりです.1. 숫자로 이루어진 카드를 여러 장 받습니다. 2. 3장씩 카드를 고르고, 3장에 적힌 숫자들의 합이 소수인지 확인합니다. 3. 받아든 카드로 만들 수 있는 소수의 개수가 많은 사람이 이기게 됩니다. 예로, [1, 2, 3, 4]라는 카드를 받았을 때 만들 수 있는 숫자는 6, 7, 8, 9이고, 소수는 7 하나이기 때문에 가지고 있는 소수의 개수는 1개입니다. [2, 3, 4, 8, 13]라는 카드를 받았을 때 만들 수 있는 숫자는 9, 13, 18, 14, 19, 23, 15, 20, 24, 25이고, 소수는 13, 19, 23 총 3개이기 때문에 가지고 있는 소수의 개수는 3개입니다.ゲームをする前に、少数の人について何も知らなかった朴テテクは、ゲームを数日遅らせ、ゲームのルールに従う関数を作成することにした.
1つの関数を完成させてください.小数の場合、3枚のカードの中の3枚のカードを小数に組み合わせます.

入力


パラメータ1

  • カード:デジタルアレイ
  • 、3つ以上のArrayカードを含む

    しゅつりょく

  • 番号タイプを返さなければなりません.
  • 注意事項

  • カードには重複する数字のカードは含まれていません.
  • カードあたりの数字は1または1000以下の自然数です.
  • I/O例

    let output = boringBlackjack([1, 2, 3, 4]);
    console.log(output); // 1
    
    let output = boringBlackjack([2, 3, 4, 8, 13]);
    console.log(output); // 3
    📌 この問題は組合せに関する問題であり,順序を考慮して数字を求めて小数と判断し,その数字に戻ればよい.
  • を生成する数値の組合せの個数に基づいてtmp配列を作成する.
  • 3個が選定されているので探索終了条件としてLが3のときに生成された数字をanser配列に加算する.
  • でない場合は、カードの長さに従ってDFSが実行されます.
  • 次拡張DFSの場合、以前に含まれていた数字を除外する必要があるため、for文の初期条件i(開始数字)に1を加算します.
  • の回答のうち少数の数字を判別するステップで、その数字を返す.
  • const isPrime = (n) => {
        for (let i = 2; i <= Math.sqrt(n); i++) {
          if (n % i === 0) {
            return false;
          }
        }
        return true;
        }
    
    function boringBlackjack(cards) {
        let answer = [];
        let tmp = Array.from({length: 3}, ()=>0);
    
        const DFS = (L, s) => {
          if ( L === 3) {
            answer.push([...tmp].reduce((prev, cur) => prev+cur))
          }
          else {
            for ( let i = s; i < cards.length; i++ ) {
              tmp[L] = cards[i]
              DFS(L+1, i+1)
            }
          }
        }
    
        DFS(0, 0)
        
        return answer.filter((num) => isPrime(num)).length
    }