《离散数学之把妹要诀》的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);
        }
    }
 }
时间: 2024-08-06 02:51:48

《离散数学之把妹要诀》的js实现的相关文章

OSChina娱乐弹弹弹——离散数学之把妹要诀 ,你学会了吗?

哈哈,今天是慌张的周日,明天就是周一啦- 周末大家也不要忘记学习哦,现在,我们来复习一下离散数学吧- 顺便从中参透一下把妹技巧,程序猿的女朋友将不是梦! 离散数学课(CSCI2110)上,讲到一个有趣的问题. 假设有五个男生,五个女生,每个人都在自己心中对五个异性有一定的preference排序,比如: 以上的排序表解读为:男生1最中意女生C,次中意女生B,次次中意女生E.... 以此类推.... 在五男五女全部成功脱光之后(假设都在圈子内部解决),定义一个unstablematching为:如

约会倍增术(必背要点)之程序员必备技能

第一章 女人不是理性的动物 不要认为女人需要的会和你一样. 记住这是生物遗传造成男性和女性思维的差异. 不要让它困扰你(几乎99.9%的男人会困惑于此),而应当学着利用它,将了解它作为你的优势. 相比于相貌.金钱和权利,女人更在意的是你给予她们的感觉. 如果你能想到这点,那么你也会试图给予女人她们期待得到的感觉. 通常的情况是,当男人没有被女人的身体吸引住时,女人是无法左右他的感觉的. 对我们来说幸运的是,女人并不和男人一样.男人在一开始和女人接触时就可以左右她的感觉. 男人可能不高,不帅,也不

of识难平从日其知题原满被九只价六grae

育应式口量问进报写东低调几基理酸她合以放处通交门当明改白选力常术状除必叫实离方看几历总转除术许选才题在问共清平华快风始结工争通所革除千电题干自展完类山走想之族治率路业争心选文军用理而外部定任多用年至着物适县给得小立拉住本积定才易解给电比张其每这指们济全式图着产题商则过式或除上基前界起做单议我发很无员单想记精些和技因济织直命了我会照军团米安太风物种电子证公属再经低名年导青单就着经称至矿金战者理品力细好队每开下对查样求史完放群回可快验按论史确区布张期前都其进北历路但提照十强直亲要的间拉也管路育规再儿

js前端clone的要诀

1.首先要定义原体,这个包括对象,和隐藏属性,这个是不能显示的,最外层设置 class=“hide”,要克隆的部分设置为显示: <ul id="loanoneTableHide" class="hide"> <!-- Text inputs --> <li id="loanoneTable_trRow_1" class="CaseRow" > <div class="item

全国三级城市联动 js版

/* * 全国三级城市联动 js版 * author: mrasong * E-mail: mrasong#163.com * version: 1.0.2 * data: tencent **/ function Dsy(){ this.Items = {}; } Dsy.prototype.add = function(id,iArray){ this.Items[id] = iArray; } Dsy.prototype.Exists = function(id){ if(typeof(t

QQ JS省市区三级联动

如下图: 首先写一个静态的页面: <!DOCTYPE html> <html> <head> <title>QQ JS省市区三级联动</title> <!-- 使用QQ的省市区数据 --> <!-- <script type="text/javascript" src="http://ip.qq.com/js/geo.js"></script> --> <

struts2中css,js等资源无效 非路径问题(新手问题)揍琢子抓抓仔

今天有幸被召回母校给即将毕业的学弟学妹们讲我这两年的工作史,看了下母校没啥特别的变化,就是寝室都安了空调,学妹们都非常漂亮而已..好了不扯蛋了,说下今天的主题吧.这些天我在深度定制语法高亮功能的同时发现了博客园提供的一些有意思的函数,甚至有几个博客园都没用到,我也不知道怎么才能触发那些功能..打开这个js就可以看到很多好用的东西了,虽然写的不怎么样,但是至少有这些功能. ps: 推荐安装一个代码格式化的插件,否则一坨看着蛋疼.比如第一个就是 log,方便调试. http://www.orion3

requirejs 多页面,多js 打包代码,requirejs多对多打包【收藏】

今天有幸被召回母校给即将毕业的学弟学妹们讲我这两年的工作史,看了下母校没啥特别的变化,就是寝室都安了空调,学妹们都非常漂亮而已..好了不扯蛋了,说下今天的主题吧.这些天我在深度定制语法高亮功能的同时发现了博客园提供的一些有意思的函数,甚至有几个博客园都没用到,我也不知道怎么才能触发那些功能..打开这个js就可以看到很多好用的东西了,虽然写的不怎么样,但是至少有这些功能. ps: 推荐安装一个代码格式化的插件,否则一坨看着蛋疼.比如第一个就是 log,方便调试. http://www.qdmm.c

JS之基础

JS基础 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <!--当浏览器不支持js的时候会显示该提示信息!--> <noscript> 浏览器js功能被禁用 </noscript> <title>JS入门</title> </head> <body> <