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


新しいチキンソースレシピ


質問する


開業以来、常勝将軍の「常勝将軍フライドチキン店」の秘訣はソースにある.他のブランドのフライドチキン店の多くは、フライドチキン店に直行するソースの秘訣を知りたいが、あきらめている.
理由は、5代連続で伝えられている「秘密の勝負長駆チキンソース比例レシピ」が70億人の人口の中で社長だけが知っているからだ.最近、ネットユーザーからこのレシピの一部を抜粋したという噂を聞いた.
その噂は以下の通りです.
  • 種の材料のうちM種のみを組み合わせたもののいずれかである.
  • 材料は0と1からなるデジタルで暗号化されており、常に1で始まり、解読できない.
    ただし、0が3個より大きい材料は変質材料であるため除外する.
  • は材料の順序が違うので、味も違うので、材料を入れる順序が違うと、違うレシピになります.
  • この噂を参考に、「秘密の勝者チキンソース」になれるなら、すべての数字を返す関数を書いてください.

    入力


    パラメータ1:stumarr

  • 番号付けの材料配列
    要素は0と1だけの数字で、常に1で始まる.
    要素を繰り返すことはできません.
    要素の長さは20を超えない.
    配列の長さは2または10を超えない.
    ex) [111, 110, 1010, 10, 10110]
  • パラメータ2:choicenum

  • 番号タイプの1個未満の充填長の自然数
  • は、選択可能な材料の数を表す.
  • ex) 2
  • しゅつりょく

  • 番号タイプを返さなければなりません.
  • 中具Arは[1,101110001111]、choicenumは2ラーメンで利用可能な材料である[1,101111].組み合わせ可能な数は6種類あります.
  • 注意事項

  • 特定の材料が使用できない場合は、空の配列[]を返さなければなりません.
  • 使用可能な材料がchoicenumより小さい場合は、空の配列[]を返さなければなりません.
  • の組み合わせと要素は小数->大数で並べ替えられます.
  • 例[1,101110001,1111]の場合、0は3つの11000[1,101111]の他に、[1,101111]の順にしなければならない.
    [1,10],[1111],[10,11],[111,11],[111,10]を返さなければならない.
  • I/O例
    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]
      ];
    */
    📌 この問題では、例外条件を適用して入力された配列を変更する必要があります.これを先にやらなかったので答えにくいです
  • で使用可能な材料がchoicenumより小さい場合は、空の配列[]を返さなければなりません.条件を満たす.
  • から入力された配列から0のインデックスが3つ排除され、昇順にソートされます.(一般式を使用)
  • この配列のインデックスにより、重複しない数のch配列が作成される.
  • 記録
  • ボックスのtmpアレイを作成します.
  • 巡視
  • が入る並び.
  • で繰り返される数字をtmpに入れないようにch配列を用いて同じインデックスを排除する.
  • レベルがchoicenum、すなわち任意の数のノードにドリルスルーされると、tmpは答えにリフレッシュされる.
  • 
    function newChickenRecipe(stuffArr, choiceNum) {
        if ( choiceNum > stuffArr.length ) {
            return [];
        }
      	// 0이 3개인 요소 제외
        let filterArr = stuffArr.filter((index) => !/0{3,}/g.test(index))
        let sortStuff = adStuff.sort((a,b) => a-b);
    
        let answer = [];
        // 조건에 부합하는 배열
        let tmp = Array.from({ length: choiceNum }, () => 0);
        //요소가 중복되면 안되므로 ch 배열 필요
        let ch = Array.from({ length: stuffArr.length }, () => 0);
    
        const DFS = (L) => {
            if ( L === choiceNum) {
                answer.push([...tmp])
            }
            else {
                for ( let i = 0; i < sortStuff.length; i++ ) {
                    if (ch[i] === 0 ) {
                        ch[i] = 1;
                        tmp[L] = sortStuff[i]
                        DFS(L+1);
                        ch[i] = 0;
                    }
                }
            }
        }
    
        DFS(0)
        return answer;
    }
    
    console.log(newChickenRecipe([1, 10, 1100, 1111], 2));