[配列]チキンソースレシピ

8015 ワード

順序を繰り返すことはできません.
アルゴリズムは繰り返しシーケンスに似ているが
浅いコピーを行うことで、標準となる要素をつなぎ合わせて、重複する方向のアルゴリズムを作成しないようにします.
  • がオープンして以来、「勝利に乗じてチキン屋を追い払う」秘訣はソースにある.他のブランドのフライドチキン店の多くは、フライドチキン店に直行するソースの秘訣を知りたいが、あきらめている.
    理由は、5代連続で伝えられている「秘密の勝負長駆チキンソース比例レシピ」が70億人の人口の中で社長だけが知っているからだ.最近、ネットユーザーからこのレシピの一部を抜粋したという噂を聞いた.
    その噂は以下の通りです.
  • これは、N種の材料の中でM種のみを組み合わせた場合の全ての数の一つである.
    材料は0と1だけの数字で暗号化され、常に1で復号することはできません.
    ただし、0が3個より大きい材料は変質材料であるため除外する.
    材料の順番が違うと味も違うので、材料を入れる順番が違うとレシピが違います.
    この噂を参考に、「秘密の勝者チキンソース」になれるなら、すべての数字を返す関数を書いてください.
    입출력 예시
    const output1 = newChickenRecipe([1, 10, 1100, 1111], 2);
    console.log(output1);
    /*
      [
        [1, 10], [1, 1100], [1, 1111],
        [10, 1], [10, 1100], [10, 1111],
        [1100, 1], [1100, 10], [1100, 1111],
        [1111, 1], [1111, 10], [1111, 1100]
      ];
    */
    
    const output2 = newChickenRecipe([10000, 10, 1], 3);
    console.log(output2); // []
    
    const output3 = newChickenRecipe([11, 1, 10, 1111111111, 10000], 4);
    console.log(output3);
    /* 
      [
        [1, 10, 11, 1111111111],
        [1, 10, 1111111111, 11],
        [1, 11, 10, 1111111111],
        [1, 11, 1111111111, 10],
        [1, 1111111111, 10, 11],
        [1, 1111111111, 11, 10],
        [10, 1, 11, 1111111111],
        [10, 1, 1111111111, 11],
        [10, 11, 1, 1111111111],
        [10, 11, 1111111111, 1],
        [10, 1111111111, 1, 11],
        [10, 1111111111, 11, 1],
        [11, 1, 10, 1111111111],
        [11, 1, 1111111111, 10],
        [11, 10, 1, 1111111111],
        [11, 10, 1111111111, 1],
        [11, 1111111111, 1, 10],
        [11, 1111111111, 10, 1],
        [1111111111, 1, 10, 11],
        [1111111111, 1, 11, 10],
        [1111111111, 10, 1, 11],
        [1111111111, 10, 11, 1],
        [1111111111, 11, 1, 10],
        [1111111111, 11, 10, 1],
      ]
    */
    function newChickenRecipo(stuffArr, choiceNum){
    	
      let fresh = []
      
      for(let n = 0 ; n<stuffArr.length ; n++){
      		
        	const element = String(stuffArr[n]
                 .split("")
                 .filter((el)=> el === "0")
                if(element.length<3){
            	 fresh.push(stuffArr[n]
            	} 
             }
        	
        	fresh.sort((a,b)=>a-b)
        
        const newRecipe = []
        
        const aux = (arr,bucket,num)=>{
        	
          	if(num === 0){
           	  newRecipe.push(bucket)
              return
            }
          	
          	for(let n= 0 ; n<arr.length ; n++){
            
            	const pick = arr[n]
                const shallowCopy = arr.slice()
                 shallowCopy.splice(n,1)
              aux(shallowCopy,bucket.concat(pick),num-1)
            }    		
        }
         	aux(fresh,[],choiceNum)
        return newRecipe
    }