Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
156 lines (122 sloc) 5.39 KB
---
title: 抽奖公告
date: 2020-01-24 03:44:24
tags:
	- 日记
---


年终总结抽奖公告

哈哈哈, 抽奖的时间的确有点长, 24 天了, 这 24 天也没水任何一篇, 2019 年月更 4 篇的任务是完不成了, 今天借着抽奖水一篇 本着公平公正的原则本次活动的源码在 抽奖公告.md

{% asset_img sticker_1.png 表情%}

玩家信息

<style rel="stylesheet"> #activity img { width: 50px; margin: 0; float: left; } #activity span { line-height: 50px; margin-left: 1rem; } #activity .player { display: flex; justify-content: flex-start; align-items: flex-start; flex-flow: row; flex-wrap: wrap; } #activity .player > div { float: left; margin-left: 2rem; margin-top: 1rem; flex: 200px; } </style>
截止当前时间 总计共有 玩家参与, 目前中奖率为 以下排名按照回复时间顺序排序

开奖结果

按照时间获取到的 HASH 为: 060f90beef43d0383e9066a50427730a071049f5e0d75b4ec9b41d9185fd41f7 少女计算中....

将会在 2 个工作日内联系到你们~, 请收到通知的小伙伴在 7 个工作日内与我联系, 最晚时间为 2 月 8 日, 超时视为放弃

奖品信息

超梦计划徽章

2 人 一人一份

不可折现, 包邮 2 月 10 日前发货

开奖时间

截止日期为 2020年1月24日(UTC+8) 20:00

抽奖算法

种子为: EOS 在 2020-01-24T12:00:00Z 产生的第一个区块的 HASH, 如果该秒未产生区块, 则使用上一秒的区块 使用的算法为: seedrandom Version: 3.0.5

假设: EOS 产生的区块 HASH 为 060e5801285efd38e44a010eb98168878e5b81bb6eec8dcd88e48fd2da146b29

  • 直接带入 seedrandom 库中
  • 使用 int32 方法获取随机数并取绝对值
  • 对结果和总人数进行 mod 操作余数即为 中奖者
  • 重复 N 次, N 为抽奖次数, 如果是同一个人, 就再往下抽取
const seed = '060e5801285efd38e44a010eb98168878e5b81bb6eec8dcd88e48fd2da146b29';
const sr = new Math.seedrandom(seed);
Math.abs(sr.int32()) % 8 // 第一位 4
Math.abs(sr.int32()) % 8 // 第二位 4, 出现重复,继续抽取
Math.abs(sr.int32()) % 8 // 第三位 2

由于没有任何接口可以使用时间查询 EOS 区块信息, 所以文章需要手动更新

<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/seedrandom/3.0.5/seedrandom.min.js"></script> <script type="text/javascript"> async function get_github_comment(issue_id) { const res = await fetch(`https://api.github.com/repos/haozi23333/haozi23333.github.io/issues/${issue_id}/comments`) return res.json() } (async () => { const date = new Date('2020-01-24T12:00:00Z') const now = new Date() let comments = await get_github_comment(41) comments = comments.filter((comment) => new Date(comment.created_at) < date).filter(comment => comment.user.login !== 'haozi23333') const hash = {} comments = comments.filter(comment => { if (hash[comment.user.login]) { return false } return hash[comment.user.login] = true }) const player_html = comments.map(({user} )=> { return ` ` }) $('#now_time').html((now > date ? date : now).toLocaleString()) $('#player_count').html(comments.length) $('#winning_rate').html(2 / comments.length * 100 + '%') $('#activity .player').append(player_html) const timer = setInterval(async () => { if (Math.seedrandom) { clearInterval(timer) const seed = '060f90beef43d0383e9066a50427730a071049f5e0d75b4ec9b41d9185fd41f7'; const sr = new Math.seedrandom(seed); const u1 = Math.abs(sr.int32()) % 7; let u2 = 0; for(let i = 0; i < 100; i++) { const t_u2 = Math.abs(sr.int32()) % 7; if (u1 === t_u2) { continue } u2 = t_u2; break } $('#res').html(`中奖编号为 ${u1}, ${u2}, 让我们恭喜这俩个B`) $('#activity .player>div').eq(u1).css({ border: '1px red solid' }) $('#activity .player>div').eq(u2).css({ border: '1px red solid' }) } }, 100) })() </script>
You can’t perform that action at this time.