[アルゴリズム]宝くじの最高と最低順位


コトリンのシャベルの後記.⭐️

問題の説明


楽透6/45(以下「楽透」と略称する)は典型的な宝くじで、1~45の数字に6つ印刷して推測することができる.次は宝くじのランキングを決める方法です.
宝くじを購入したミンウは、当選番号の発表日を楽しみにしていた.しかし、敏宇の弟は宝くじに落書きをして、番号の一部が分からなくなった.当選番号が発表された後、敏宇は自分が購入した宝くじの当選の最高順位と最低順位を知りたいと思っています.
購入した6つの宝くじ番号が44、1、0、0、3125だとします.6つの当選番号がそれぞれ31、10、45、1、6、19の場合、当選可能な最高および最低の例は以下の通りである.
順序が
  • であれ、購入した宝くじに当選番号に該当する番号があれば、正解と認定されます.
  • では、2つの非表示の番号がそれぞれ10と6であると仮定すると、3位になります.
    -他にも3位を作る方法があります.しかし、私たちはそれを2位以上にすることはできません.
  • は、11と7の2つの知らない番号を持っていると仮定し、5位になります.
    -他にも5位を作る方法があります.しかし、彼を6位にすることは不可能だ.
  • せいげんじょうけん
  • lottosは整数配列で、長さは6です.
  • lottosのすべての要素は45以下の整数です.
    -0は認識できない数字を表します.
    -0以外の数字はlottosで2つを超えない.
    -lottosの要素が整列していない可能性があります.
  • win numsは長さ6の整数配列である.
  • win numsのすべての要素は45より大きい整数です.
    -win numsには同じ数字が複数含まれていません.
    -win numsの要素が整列していない可能性があります.
  • パラメータは敏宇が購入した宝くじ番号を含む宝くじ、当選番号の宝くじである.このとき、可能な最高順位と最低順位を配列に順番に入れて戻ります.

    に答える


    1.答えの並び替えを最初に初期化します.
    2.未知番号(0)が間違っていると仮定し、現在の既知番号で正しい番号を特定するだけで、最小の数字を求めることができる.
    3.未知の番号がすべて正しいと仮定すると、現在の正しい番号+0の個数で最大の正しい番号を求めることができる.
    4.一番つらいランキング方法.ifゲートで作った単純無知な方法しか思いつかなかったのですが、他人の解答を見てrankを配列に変えてインデックスで近づけました!天才的.🤦‍♀️)
    すべてのエラー(0の場合)が発生した場合、ランキングは6になり、インデックス0の位置の値も6になります.上記で求めた最大/最小個数をrank[]のインデックスに変換し、それぞれ答え[0]、答え[1]の位置に挿入する.
    function solution(lottos, win_nums) {
        let answer = new Array(2);
        let rank = [6,6,5,4,3,2,1]
    
        //최저 순위.
        let minScore = lottos.filter(x=>win_nums.includes(x)).length
        answer[1] = rank[minScore]
    
        //최고 순위
        let unknown = lottos.includes(0) ? lottos.filter(x=>0 === x).length : 0
        let maxScore = unknown + minScore 
        answer[0] = rank[maxScore]
        
        return answer;
    }