问题一: 有四个骰子A B C D,它们六个面的数字分别是 A. 0 0 4 4 4 4 B.3 3 3 3 3 3 C.6 6 2 2 2 2 D.1 1 1 5 5 5 此时你要和一个对手分别选一个骰子进行投掷,掷出点数大的人获胜。如果你想让自己获胜的可能性最大,你会给自己选哪个骰子,给对手选哪个骰子?请写明具体方法
/*
* a 是我选的骰子
* b 是为对方选的骰子
* a,b均为数组传参
* 首先计算出a中每一项比b中的几项大,生成一个新的数组
* 把新数组按相同的项拆分为多个数组
* */
function chance(a,b){
var ary=[],len=a.length,probability=0;
a.forEach(function(value){
var largerNum=0;
b.forEach(function(v){
if(value>v){
largerNum++;
}
});
ary.push(largerNum);
});
function group(arr){
var itemAry=arr.splice(0,1);
arr.forEach((val,i)=>{
if(val===itemAry[0]){
itemAry.push(val);
}
});
arr.splice(0,itemAry.length-1);
probability+=itemAry.length/len*itemAry[0]/len;
if(arr.length){
group(arr);
}
}
group(ary);
return probability;
}
function fun(array){
var maxProbability=0, project=[];
array.forEach(function(item,index){
array.forEach(function(val,i){
if(i!==index){
var probability=chance(item,val);
if(probability>maxProbability){
maxProbability=probability;
project.push(item,val)
}
}
})
})
return {project:project,maxProbability:maxProbability}
}
console.log(fun([[6, 6, 2, 2 ,2, 2],[1, 1, 1, 5, 5, 5],[0, 0, 4, 4, 4, 4],[3, 3, 3, 3, 3 ,3 ]]));
答案是我选662222,给对方选111555,赢的概率是0.6666666
问题二: 有一个数组 list,结构如下: [{ "id": 123, "category": "USA", "name": "xiaohong" }, { "id": 12, "category": "UK", "name": "xiaoming" }, { "id": 45, "category": "CHINA", "name": "jingjing" }, { "id": 23, "category": "USA", "name": "xiaoliu" }, { "id": 78, "category": "USA", "name": "meili" }, { "id": 1, "category": "CHINA", "name": "lvluo" }, { "id": 45, "category": "USA", "name": "xiaopeng" }, { "id": 78, "category": "CHINA", "name": "maomao" }, { "id": 34, "category": "USA", "name": "huhu" }, { "id": 12, "category": "FRANCE", "name": "jiaojiao" }, { "id": 38, "category": "USA", "name": "ming" }, { "id": 22, "category": "USA", "name": "zhonghua" }] 请用原生js,把如上数组先按 category 分类,再把每个分类里的数组按照name 进行升序排序。 (说明:如果不使用原生js中 Array.sort()方法,可以加分)
function mySort(ary) {
let sortObj={};
ary.forEach(function (item) {
!sortObj[item.category]&&(sortObj[item.category]=[]);
sortObj[item.category].push(item)
});
for(var key in sortObj) {
var value=sortObj[key];
for(var i=0;i<value.length-1;i++){
for(var j=0;j<value.length-i-1;j++){
if(value[j].name.localeCompare(value[j+1].name)===1){
var temp=value[j];
value[j]=value[j+1];
value[j+1]=temp;
}
}
}
sortObj[key]=value;
}
return sortObj;
}