参与抽签的总人数NUM = 441,通过以下流程抽取25名幸运同学:
- 获取2019年5月4日开盘时(北京时间5月4日 9:30pm)的纳斯达克指数N1,道琼斯指数N2
- 取N1*N2的前5位数,并将其转化为字符串Skey
- for k = 1:25
将Skey与k合并为新的字符串Skey',对Skey'进行一次SHA1运算,得到幸运数字lucky
获奖编号 = mod(lukcy,NUM)
抽奖结果于5月4日晚11点前公布
说明: 由于两个股票指数无法精准预测,而由于SHA1运算对输入的敏感特性,导致幸运数字lucky是不可预测的!因此,以上算法保证了抽签的公平性。此外,当股票指数公布后,任何同学都可以根据以下源码重复进行抽签,抽签的流程是完全公开的。
### 抽签代码
from googlefinance.get import get_code
from hashlib import sha1
NUM = 441
NASDAQ = #2019年5月4日纳斯达克开盘指数 https://finance.yahoo.com/quote/%5EIXIC/
DJI = #2019年5月4日道琼斯开盘指数 https://finance.yahoo.com/quote/%5EDJI?p=^DJI
Skey = (str(NASDAQ*DJI))[0:5]
for k in range(25):
luckeyNum = sha1((Skey + str(k)).encode())
luckeyNum = int(luckeyNum.hexdigest(),16)
TheChosenOne = luckeyNum%NUM
print('恭喜第{0}位同学入选!'.format(TheChosenOne))
再次说明:有些同学不理解为什么要搞这么复杂的抽签,直接随机数不就了事了嘛。然而,随机数的弊端是无法证明是否是黑箱操作。以上方法通过不可预知的股票指数,以及算法上的可重复可验证性,从技术上杜绝了黑箱操作。
结果公布:NASDAQ = 8092.88 DJI = 26379.14,代入以上程序,得到以下幸运同学名单:
image.png
网友评论