输入是两个数字,一个总次数,一个是成功次数。例如100次可以成功10次。
要求是一个函数 foo()
,在已知这两个输入的情况下,被调用100次,始终返回10次true
, 90次false
笨的办法不难找。想看看各位算法高手有没有优雅一点的。最好是javascript的
输入是两个数字,一个总次数,一个是成功次数。例如100次可以成功10次。
要求是一个函数 foo()
,在已知这两个输入的情况下,被调用100次,始终返回10次true
, 90次false
笨的办法不难找。想看看各位算法高手有没有优雅一点的。最好是javascript的
]
es6写很简洁- -
var foo = (function(){
var pointer = -1,_result
//创建指定长度的指定值占指定数量的数组
var mark_arr = (num,total) => Array.from(new Array(total)).map((k,i)=>i < num)
//数组打乱排序
var random_arr = (arr) => arr.sort(()=>Math.random() < 0.5 ? 1 : -1)
//调用100次的函数
return (total,success)=>{
if(pointer >= total) pointer = -1
//生成指定数量数组并且打乱
if(pointer===-1) _result = random_arr( mark_arr(success,total) )
//返回当前指针所在值
return _result[++pointer]
}
})()
翻译一下es5的结果
"use strict";
var foo = function () {
var pointer = -1,
_result;
//创建指定长度的指定值占指定数量的数组
var mark_arr = function mark_arr(num, total) {
return Array.from(new Array(total)).map(function (k, i) {
return i < num;
});
};
//数组打乱排序
var random_arr = function random_arr(arr) {
return arr.sort(function () {
return Math.random() < 0.5 ? 1 : -1;
});
};
//调用100次的函数
return function (total, success) {
if (pointer >= total) pointer = -1;
//生成指定数量数组并且打乱
if (pointer === -1) _result = random_arr(mark_arr(success, total));
//返回当前指针所在值
return _result[++pointer];
};
}();
1 回答3.1k 阅读✓ 已解决
1 回答2.6k 阅读
2.5k 阅读
1 回答1.1k 阅读
815 阅读
Unit Test: