RockPaperScissors(石ハサミ布)


質問する
じゃんけんゲームとは、2人以上が同時に「石はさみ布」を叫び、石はさみ布に手の形を表して勝負を決めるゲームです.3皿のハサミ石布ゲームをして、一人で3回の選択をすることができます(例えば:ハサミ、ハサミ、布).3回の選択で関数を作成し、可能なすべての数値を求めることができます.
しゅつりょく
  • の2次元配列(arr[i])を返さなければなりません.
  • arr[i]は、総数の1つ(合計3回の選択)を表す配列である.
  • arr[i]は、1つまたは複数の「rock」、「paper」および「ハサミ」要素を含む配列である.
  • arr[i].lengthは3です.
  • 注意事項
  • は、最終的に、重み付け順序に従ってアレイを返す.
  • の重要度は、「rock」、「paper」、「ハサミ」の順である.
  • は分かりやすく、オリンピックの順位決定方式を参考にすることができます.
  • 金メダル(「rock」)は銀メダル(「paper」)より優先され、銀メダル(「paper」)は銅メダル(「ハサミ」)より優先された.
  • I/O例
    let output = rockPaperScissors();
    
    console.log(output);
    /*
        [
          ["rock", "rock", "rock"],
          ["rock", "rock", "paper"],
          ["rock", "rock", "scissors"],
          ["rock", "paper", "rock"],
          // ...etc ...
        ]
      */
    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 ...
        ]
      */
    方法
    const rockPaperScissors = function(number) {
      // TODO: Your code here!
     let result = [];
      let rPS = ["rock","paper","scissors"];
      let howmany = Math.pow(3,number)
    
      while( result.length < 27){ // 27가지 경우의 수가 되면 반복문 그만
        let cases = [];            // 랜덤으로 뽑힌 결과를 cases에 담기
        for(let i =0; i < rPS.length; i++){// 0-2 사이 랜덤 인데스 구하기
          let randomIndex = parseInt(Math.random() * 3);
          cases[i] = rPS[randomIndex];//or cases.push(rPS[randomIndex]);
        }
        // 빈배열이 아니면 하나 하나 체크하고,  case가 같은게 있으면 
        //  count 를 +1을 한다.
        let count = 0;        
        for(let eachCase of result){   // result 안의 case를 하나 하나 순회
          if(eachCase.join() === cases.join()){  // 만약에 resutl안의 eachCase와 case가 같으면 
            count++;                         // count 값을 증가
          }
        }
        //즉, count가 0 이면, result안에 같은 case가 없다는 뜻
        if(count === 0 ){ //만약에 result를 하나 하나 다 체크 후에 count 가 0이면 
          result.push(cases); //result에 case를 푸시
        }
        count =0;
      } // while문 종료
      return result;
    };
    方法.
     const rockPaperScissors = function (number) {
       // (test 충족 위해서) argument 입력 없었을 때, number에 3 할당
       if (number === undefined) number = 3;
       let op1 = 'rock', op2 = 'paper', op3 = 'scissors';
       let returnArr = [[]];
       let tempArr = [];  // 값 임시 보관용 변수
       while (number > 0) {
         for (let el of returnArr) {
           tempArr.push([...el, op1]);
           tempArr.push([...el, op2]);
           tempArr.push([...el, op3]);
         }
         // returnArr에 tempArr 값을 복사하고, tempArr은 초기화 및 number --1;
         returnArr = [...tempArr];
         tempArr = [];
         number--;
       }
       return returnArr;
     };