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

12,322 阅读4分钟

开奖记录

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

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

日期🌅奖品🎁中奖工友🎉沸点链接🚀
2022.09.26usc旅行箱遇到一个刷子,tui, juejin.cn/pin/7148654… 后面会把奖补回来juejin.cn/pin/7147491…
2022.09.22迪卡侬登山杖少女的英雄梦juejin.cn/pin/7144893…
2022.07.22【1支爱国者录音笔、1张100元京东卡、3个掘金棒球帽、2个护腕鼠标垫、3个商务笔记本】后端小菜鸡起feiXyuan_sun麋鹿先生一枚前端小姐姐郑儿八经指尖逆苍穹YvLu这里查无此人哒布溜juejin.cn/pin/7121539…
2022.06.26罗技(G) G302 电竞游戏鼠标(199 rmb)用户未知juejin.cn/pin/7112230…
2022.05.17HVDB洗面奶1瓶林浅不见鹿juejin.cn/pin/7098594…
2022.04.19小熊电热饭盒掘金宋鸭丝juejin.cn/pin/7088128…
2022.03.15云南黑咖啡(2盒)Ylimhswyoonjuejin.cn/pin/7075169…
2022.01.25Dell Pro Wireless Keyboard and Mouse – KM5221W阿珍_你来真的呀juejin.cn/pin/7056944…
2021.11.15一套掘金徽章(共8枚)就你帅juejin.cn/pin/7030608…
2021.11.07掘金超大鼠标垫Benjaminjuejin.cn/pin/7027509…
2021.11.02掘金缸子(或帽子)掘金WindTalkerjuejin.cn/pin/7025902…
2021.09.271 包地狱辣拉面说(共 3 名)BUG预言家一只鱼呀摸摸鱼神-未领取juejin.cn/pin/7012498…
2021.09.144 个毛绒公仔看星星的兔子juejin.cn/pin/7006633…
2021.09.061箱(6包)加辣加臭螺蛳粉滑稽点juejin.cn/pin/7003205…
2021.08.07100 现金红包你的代码有bugjuejin.cn/pin/6993241…
2021.07.23掘金缸子Mr_Chaijuejin.cn/pin/6987296…

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

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

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

image.png

抽奖算法

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

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

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

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

附加优化:

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

/***************获取所有评论的代码******************/

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毫秒试试,你能优化优化吗?

/***************抽奖代码******************/

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
    &&date.getMinutes()===0
    &&date.getSeconds()===0) { 
    // 开奖 
        handleLottery()
    }
},1000)
  • 掘金评论功能在改版,获取 Dom 可能存在细微差别;

image.png

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

更新: 一次性抽多人的:

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
    &&date.getMinutes()===0
    &&date.getSeconds()===0) { 
    // 开奖
       handleLottery(3) // 抽 3 个人
    }
},1000)

不忘初心

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

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

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

image.png

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

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

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

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

相信技术、传递价值。 —— juejin.cn

输出暴露输入、技术洞见生活,我们同行。 —— 掘金安东尼

祝你好运

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

image.png

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