首页 > 代码库 > 《离散数学之把妹要诀》的js实现

《离散数学之把妹要诀》的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实现