《离散数学之把妹要诀》的js实现

网上看到一篇有意思的文章《离散数学之把妹要诀》

就用JS写了上面所讲的配对方式:

首先设定变量

 //    男生理想列表

 var menPreference = {

    A: [1, 2, 3, 4, 5],

    B: [1, 3, 4, 2, 5],

    C: [3, 2, 1, 4, 5],

    D: [4, 5, 2, 3, 1],

    E: [5, 2, 1, 4, 3]

 };

  // 女生理想列表

  var womemPreference = {

    1: ['A', 'B', 'C', 'D', 'E'],

    2: ['B', 'D', 'A', 'E', 'C'],

    3: ['E', 'B', 'C', 'A', 'D'],

    4: ['B', 'D', 'E', 'A', 'C'],

    5: ['B', 'C', 'A', 'D', 'E']

 };



 //    最终配对

 var couples = {}

以递归的形式调用表白和配对方法:

 //    获取稳定配对

 var getStableCouple = function(){

    for(var i in menPreference){

        var the_one = menPreference[i].shift();

        console.info("男" + i + "表白女" + the_one);

        if(i == womemPreference[the_one][0]){

            couples[i] = the_one;

            console.info("男" + i + "成功牵手女" + the_one);

            //    在原有列表中删除

            removeCouple(the_one, i);

        }

    }

    var len = getAttrLen(couples);

    if(len < 5){

        getStableCouple();

    }else{

        console.info(couples);

    }

 };

其中在配对完成后要删除原有列表中的这对男女的数据,具体方法如下:

//    扩展数组方法

    Array.prototype.remove=function(dx){

      if(isNaN(dx)||dx>this.length){return false;}

      for(var i=0,n=0;i<this.length;i++)

      {

        if(this[i]!=this[dx])

        {

          this[n++]=this[i]

        }

      }

      this.length-=1

  }



 var removeCouple = function(x, y){

    delete womemPreference[x];

    delete menPreference[y];

    for(var i in womemPreference){

        var arr = womemPreference[i];

        for(var j=0; j<arr.length; j++){

            if(y == arr[j]) arr.remove(j);

        }

    }

    for(var i in menPreference){

        var arr = menPreference[i];

        for(var j=0; j<arr.length; j++){

            if(x == arr[j]) arr.remove(j);

        }

    }

 }

 

你可能感兴趣的:(js)