《离散数学之把妹要诀》的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实现的更多相关文章
- input required字段;django input输入框不填写会自动变红如何修改
前端页面中,input不输入任何内容时,点击submit时,未填写的input会标红框,有些人还会有"该字段必填的字样"!! 什么鬼,你妹的,js也见不到,css3动画也见不到,怎 ...
- 通用js函数集锦<来源于网络> 【二】
通用js函数集锦<来源于网络> [二] 1.数组方法集2.cookie方法集3.url方法集4.正则表达式方法集5.字符串方法集6.加密方法集7.日期方法集8.浏览器检测方法集9.json ...
- 网络问卷调查js实现代码
昨天一个同行妹纸写了一个网络问卷调查的效果,但是有bug,于是就来问我该如何解决这个bug.经过我的分析,bug主要还是出在复选框的那部分,经过修改,bug问题解决,现在贴出如下代码,仅供大家参考: ...
- 全国城市三级联动 html+js
全国城市三级联动,没有css,所以屏幕的自适应必须自己想办法,手机端慎用(最好不要用,因为有些我也说不出的展示问题). html页面 <!DOCTYPE html> <html> ...
- js表单提交,面向对象
一.js表单验证之后再提交 1.普通按钮onclick函数调用表单的submit()函数 <input type=button name="submit1" value=&q ...
- QQ JS省市区三级联动
如下图: 首先写一个静态的页面: <!DOCTYPE html> <html> <head> <title>QQ JS省市区三级联动</title ...
- JS中定义类的方法
JS中定义类的方式有很多种: 1.工厂方式 function Car(){ var ocar = new Object; ocar.color = "blue" ...
- Python之路,Day18 - 开发一个WEB聊天来撩妹吧
Python之路,Day18 - 开发一个WEB聊天来撩妹吧 本节内容: 项目实战:开发一个WEB聊天室 功能需求: 用户可以与好友一对一聊天 可以搜索.添加某人为好友 用户可以搜索和添加群 每个 ...
- js 全国城市3级联动
js /* * 全国三级城市联动 js版 */ function Dsy(){ this.Items = {}; } Dsy.prototype.add = function(id,iArray){ ...
随机推荐
- IE下全局对象报 脚本错误提示“对象不支持此属性或方法”解决方案
原来是IE会把页面中的元素id可以直接当变量名一样使用,但是这个id变量不能被赋值. 例如: <body id='body'> <script type="text/jav ...
- Revisit-after元标签是什么,SEO的作用是什么
很多网站都使用了revisit-after的问题,关于revisit-after这个标签是什么,revisit-after元标签的作用究竟是什么呢,应该如何使用revisit-after元标签呢? 这 ...
- dom操作例子
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- 如何获取浏览器URL中查询字符串的参数
首先要知道Location这个对象以及这个对象中的一些属性: href:设置或返回完整的url.如本博客首页返回http://www.cnblogs.com/wymninja/ host:设置或返回主 ...
- 查看 并发请求数及其TCP连接状态
服务器上的一些统计数据: 1)统计80端口连接数netstat -nat|grep -i "80"|wc -l 2)统计httpd协议连接数ps -ef|grep httpd|wc ...
- Android 技巧记录
1.取消EditText自动获取焦点 在项目中,一进入一个页面, EditText默认就会自动获取焦点,弹出输入法界面,很不友好.那么如何取消这个默认行为呢? 解决之道:在EditText的父级控件中 ...
- 饿了么 天降红包 bug ----这是谁的错
早上来点餐,从没用饿了么点成功过,因为太难用. 今早,不,应该说前几天,出了个天降红包,领了个满20 减110的红包,没在意,因为还没升级客户端,不能用. 今早来,升级了一下客户端,下单了,看了饿了么 ...
- jquery实现带左右箭头和数字焦点的图片轮播手写代码
以前图片轮播经常用网上的插件,然后想说自己也要认真看看,一步一步弄明白,所以就自己研究写了个图片轮播的代码,我自己觉得还算是挺简单的.如有改进的地方,欢迎你能帮我指出,共同进步. (ps:博客园如何上 ...
- [iOS]リソースファイルの取得方法
リソースファイルのパスを取得するためには下記のように実装する. -------------------------------------------------------------------- ...
- 使用Mindjet MindManager 制作流程图案例
心得体会是: 导出为swf格式的流程图最为美观 有些过于复杂的对象在swf viewer中是无法显示的(比如各种表格,任务,提醒,自定义属性). 所有主题和子主题在viewer刚打开的时候一定都是全部 ...