前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >公开抽奖算法!公示开奖记录!请叫我“蜻蜓队长”!

公开抽奖算法!公示开奖记录!请叫我“蜻蜓队长”!

作者头像
掘金安东尼
发布2022-09-19 11:15:13
4750
发布2022-09-19 11:15:13
举报
文章被收录于专栏:掘金安东尼

theme: awesome-green

开奖记录

本瓜将在此小节,公开往期所有抽奖的【开奖记录】,并会持续更新、维护这个表!

以后的每次抽奖也都会带着本篇链接🔗进行指引~~

日期🌅

奖品🎁

中奖工友🎉

沸点链接🚀

2022.07.22

【1支爱国者录音笔、1张100元京东卡、3个掘金棒球帽、2个护腕鼠标垫、3个商务笔记本】

后端小菜鸡、起fei、Xyuan_、sun麋鹿先生、一枚前端小姐姐、郑儿八经、指尖逆苍穹、YvLu、这里查无此人、哒布溜

2022.06.26

罗技(G) G302 电竞游戏鼠标(199 rmb)

用户未知

2022.05.17

HVDB洗面奶1瓶

林浅不见鹿

2022.04.19

小熊电热饭盒

掘金宋鸭丝

2022.03.15

云南黑咖啡(2盒)

Ylimhs、wyoon

2022.01.25

Dell Pro Wireless Keyboard and Mouse – KM5221W

阿珍_你来真的呀

2021.11.15

一套掘金徽章(共8枚)

就你帅

2021.11.07

掘金超大鼠标垫

Benjamin

2021.11.02

掘金缸子(或帽子)

掘金WindTalker

2021.09.27

1 包地狱辣拉面说(共 3 名)

BUG预言家、一只鱼呀、摸摸鱼神-未领取

2021.09.14

4 个毛绒公仔

看星星的兔子

2021.09.06

1箱(6包)加辣加臭螺蛳粉

滑稽点

2021.08.07

100 现金红包

你的代码有bug

2021.07.23

掘金缸子

Mr_Chai

各位工友请放心,既然把抽奖这个事儿正紧的提上了日程,后续活动会越来越多!!

如果你对奖品有任何想法,可以留言反馈~

持续关注!!持续抽奖!!! 让我康康,有谁会跟奖品过不去(●'◡'●)~~

抽奖算法

抽奖嘛,公平永远是第一位!每人的中奖概率均等是最最最要紧的前提!

刚好在一篇掘文《# 卡牌大师:玩转“洗牌算法”,幸运女神在微笑 (^_^)》中研究了乱序洗牌算法,如果公开算法来抽奖,那不得是:有理有据,百口莫辩!

老观众都知道,抽奖算法一直用的是著名的 Fisher-Yates 算法,对原理有兴趣的工友,可到前面的文章中去寻找;

以下是完整代码,可在活动沸点界面的控制台中运行:

附加优化:

原本的代码要一直把评论全部展开才能获取全部名单,怎样能通过脚本自动展开呢?咱就是说,有需要的工友动手试试呗,这里本瓜先搞一个简陋版本的,定次数调用滚轮下滑;

代码语言:javascript
复制
/***************获取所有评论的代码******************/

window.scrollTo(0,document.body.scrollHeight)
document.getElementsByClassName("fetch-more-comment")[1].click() // 一:先模拟第一次点击展开评论

function doInterval(fn,times,duration){
    let timesRun=0
    var interval = setInterval(function(){
    timesRun += 1;
    if(timesRun === times){
    clearInterval(interval);
    }
    console.log("下拉获取次数",timesRun)    
    fn();
}, duration);
}

doInterval(()=>window.scrollTo(0,document.body.scrollHeight),30,1000) // 二、再模拟连续下滑滚轮触底

// * ps:这么写其实有点小毛病,不信可以把间隔时间缩短到100毫秒试试,你能优化优化吗?
代码语言:javascript
复制
/***************抽奖代码******************/

const domArr=document.getElementsByClassName("comment-list")[0].getElementsByClassName("username username")

const getLuckyBoys = function(){
    // 获取参与沸点评论的掘友
    let luckyBoys = []
    for(let i =0;i<domArr.length;i++){
    luckyBoys.push(domArr[i].innerText)
    }
    return Array.from(new Set(luckyBoys))// 去重“重复评论”
}

const FYShuffle_lucyest = function () {
    // 乱序算法
    let nums=[]
        for(let i=1,len=getLuckyBoys().length;i<=len;i++){
        nums.push(i)
    }
    const radomNums = nums.slice(0);
    let len = radomNums.length;

    while (len > 1) {
        let rand = Math.floor(Math.random() * len);
        len--;
        let temp = radomNums[len];
        radomNums[len] = radomNums[rand];
        radomNums[rand] = temp;
    }
    return radomNums[0]; // 中奖序号
}

const handleLottery =function (){
    // 进行抽奖
    console.log("参赛选手:",getLuckyBoys())
    console.log("最终得奖:",getLuckyBoys()[FYShuffle_lucyest()-1])
    console.log(new Date())
}
setInterval(()=>{
    // 当天抽奖倒计时
    let date = new Date()
    console.log(`倒计时,${date.getHours()}:${date.getMinutes()}:${date.getSeconds()}`)
    if (date.getHours() ===17
    &amp;&amp;date.getMinutes()===0
    &amp;&amp;date.getSeconds()===0) { 
    // 开奖 
        handleLottery()
    }
},1000)
  • 掘金评论功能在改版,获取 Dom 可能存在细微差别;

@我本来就很美,这个工友,脚本给你啦~ 按需所取,按需所改🙌

更新: 一次性抽多人的:

代码语言:javascript
复制
const domArr=document.getElementsByClassName("comment-list")[0].getElementsByClassName("username username")

const getLuckyBoys = function(){
    // 获取参与沸点评论的掘友
    let luckyBoys = []
    for(let i =0;i<domArr.length;i++){
    luckyBoys.push(domArr[i].innerText)
    }
    return Array.from(new Set(luckyBoys))// 去重“重复评论”
}

const FYShuffle_lucyest = function (N) {
    // 乱序算法
    let nums=[]
        for(let i=1,len=getLuckyBoys().length;i<=len;i++){
        nums.push(i)
    }
    const radomNums = nums.slice(0);
    let len = radomNums.length;

    while (len > 1) {
        let rand = Math.floor(Math.random() * len);
        len--;
        let temp = radomNums[len];
        radomNums[len] = radomNums[rand];
        radomNums[rand] = temp;
    }
    return radomNums.slice(0,N); // 中奖数组
}

const handleLottery =function (N){
    // 进行抽奖
    console.log("参赛选手:",getLuckyBoys())
    const muti_lucyest=FYShuffle_lucyest(N)
    for(let i=0;i<N;i++){
       console.log(`最终得奖第${i+1}位:${getLuckyBoys()[muti_lucyest[i]-1]}`)
    }
    console.log(new Date())
}


setInterval(()=>{
    // 当天抽奖倒计时
    let date = new Date()
    console.log(`倒计时,${date.getHours()}:${date.getMinutes()}:${date.getSeconds()}`)
    if (date.getHours() ===10
    &amp;&amp;date.getMinutes()===0
    &amp;&amp;date.getSeconds()===0) { 
    // 开奖
       handleLottery(3) // 抽 3 个人
    }
},1000)

不忘初心

话说本瓜 为什么 要在沸点进行 抽奖 呢?最直接的原因有两点:

  1. 感谢大家一直以来的支持🙏;
  2. 顺道能吸波粉(那就更好啦(●'◡'●));

内容创作者嘛,当然希望在创作的同时能得到关注,有时候费劲心力撰文一篇却无人问津,多少是有些失落的。

没办法做到极致的纯粹,也担心最终成为 “自嗨型” 作者~~

所以大家的反馈和支持对本瓜来说,真的是最强有力的鼓励!!(ง •_•)ง

欢迎大家加我加群,微信:Anthony1453,V我一起学习~~

或者关注公众号【掘金安东尼】,上面有除了程序员之外的更多生活写文、创作;

相信技术、传递价值。 —— juejin.cn 输出暴露输入、技术洞见生活,我们同行。 —— 掘金安东尼

祝你好运

最后,祝大家抽奖总是好运连连!!!

我是掘金安东尼,公众号同名,输出暴露输入,技术洞见生活,再会~

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-09-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • theme: awesome-green
  • 开奖记录
  • 抽奖算法
  • 不忘初心
  • 祝你好运
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档