[繰り返し順]石切り布


rockPaperScissors


質問する


じゃんけんゲームとは、2人以上が同時に「石はさみ布」と叫び、石はさみ布に手を表す形を伸ばして勝負を決めるゲームです.3皿のハサミ石布ゲームをして、一人で3回の選択をすることができます(例えば:ハサミ、ハサミ、布).3回の選択で関数を作成し、可能なすべての数値を求めることができます.

入力


n

しゅつりょく

  • の2次元配列(arr[i])を返さなければなりません.
  • arr[i]は、総数の1つ(合計3回の選択)を表す配列である.
  • arr[i]は、1つまたは複数の「rock」、「paper」および「ハサミ」要素を含む配列である.
  • arr[i].長さ324579182

    注意事項

  • は、最終的に、重み付け順序に従ってアレイを返す.
  • の重要度は、「rock」、「paper」、「ハサミ」の順である.
  • は分かりやすく、オリンピックの順位決定方式を参考にすることができます.
  • 金メダル(「rock」)は銀メダル(「paper」)より優先され、銀メダル(「paper」)は銅メダル(「ハサミ」)より優先された.
  • I/O例


    Advanced
    正の整数輪がじゃんけんゲームの数を表す場合は、その輪の間に選択できるすべての場合の数を返す関数を作成します.
    let output = rockPaperScissors(5);
    
    console.log(output);
    /*
        [
          ["rock", "rock", "rock", "rock", "rock"],
          ["rock", "rock", , "rock", "rock", "paper"],
          ["rock", "rock", , "rock", "rock", "scissors"],
          ["rock", "rock", "rock", "paper", "rock"],
          ["rock", "rock", "rock", "paper", "paper"],
          ["rock", "rock", "rock", "paper", "scissors"],
          ["rock", "rock", "rock", "scissors", "rock"],
          // ...etc ...
        ]
      */
    📌 この問題に対してDFS方式を採用した.
  • ナビゲーション条件下で、tmp配列に重複インデックスが書き込まれる.
  • levelを1ずつ増やし、for文を繰り返します.
  • levelがnの場合、ブラウズを終了し、記録されたtmp配列を答えに入れる.
  • function rockPaperScissors (n) {
        let answer = [];
        const caseOfPlay = ["rock", "paper", "scissors"];
    
        let tmp = Array.from({ length: n}, () => 0)
    
        const DFS = (L) => {
            if (L === n) {
                answer.push([...tmp])
            }
            else {
                for ( let i = 0; i < caseOfPlay.length; i++) {
                    tmp[L] = caseOfPlay[i]
                    DFS(L+1)
                }
            }
        }
        DFS(0);
    
        return answer;
    }
    DFSにはまだ詳しくないので、この問題を解決するのに長い時間がかかりました.もっと多くの問題を解いてみるべきだと思います.