网安引领时代,弥天点亮未来
1.在B站闲逛无意间看见这种新闻,简单概括就是人家搭建了菠菜网站,并且后台可以调整中奖概率,一看就是割韭菜割多了,被人举报。
2.觉得很有意思,于是自己用JavaScript模拟了中奖概率的代码。
3.概率问题说白了就是占比越高,随机到的几率越大,例如下面的代码。
4.生成长度为100的数组,40个字符是ok,60个字符是no,然后根据数组长度生成随机索引取数组内的字符,这样有40%的几率随机到ok,有60%的几率随机到no。
5.如何通过输入的概率,自动计算出数组长度和需要的字符ok个数呢?例如下面的代码。
6.如果字符ok随机到的概率是50%,通过代码计算可以得到数组长度为10,数组内需要有5个ok字符。
7.如果字符ok随机到的概率是0.1%,通过代码计算可以得到数组长度为1000,数组内需要有1个ok字符。
8.如何实现的呢,下面可以简单概括一下计算方法。
9.比如0.1%的几率,除以100是0.001,但是字符个数只能是整数,不可能是0.001个。
10.然后再取小数点后面的字符,长度一共是3位。
11.换句话说,我们需要生成一个10*10*10=1000长度的数组,需要0.001*10*10*10=1个ok字符串,最后通过随机才能实现0.1%的效果。
12.最终把两段代码进行合并,实现的效果如下。
13.ok字符50%的概率,数组长度10,存在5个ok字符串。
14.ok字符0.1%的概率,数组长度1000,存在1个ok字符串。
15.ok字符0.01%的概率,数组长度10000,存在1个ok字符串。
16.ok字符3.5%的概率,数组长度1000,存在35个ok字符串。
17.文章内容仅供参考学习和研究用,如果师傅有更有意思的思路,也可以一起分享。
18.下面是文章案例所有的代码。
//by:奥村燐
var a=1/100
var b=a.toString().split(".")
if(b.length>1){
var c=1
for (var d=0;d<b[1].length;d++){
c=c*10
}
e=a*c
f=c
var probability=[]
for(var i=0;i<f;i++){
if(i<e){
probability[i]="ok"
}else{
probability[i]="no"
}
}
console.log(probability)
}
19.欢迎大家关注弥天实验室公众号。
知识分享完了
喜欢别忘了关注我们哦~
学海浩茫,
弥 天
安全实验室
原文始发于微信公众号(弥天安全实验室):利用JavaScript实现抽奖概率算法研究
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论