首页 > 代码库 > 《离散数学之把妹要诀》的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实现
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。