參與抽簽的總?cè)藬?shù)NUM = 441,通過以下流程抽取25名幸運(yùn)同學(xué):
- 獲取2019年5月4日開盤時(shí)(北京時(shí)間5月4日 9:30pm)的納斯達(dá)克指數(shù)N1会傲,道瓊斯指數(shù)N2
- 取N1*N2的前5位數(shù)姑隅,并將其轉(zhuǎn)化為字符串Skey
- for k = 1:25
將Skey與k合并為新的字符串Skey'侦鹏,對(duì)Skey'進(jìn)行一次SHA1運(yùn)算铜跑,得到幸運(yùn)數(shù)字lucky
獲獎(jiǎng)編號(hào) = mod(lukcy,NUM)
抽獎(jiǎng)結(jié)果于5月4日晚11點(diǎn)前公布
說(shuō)明: 由于兩個(gè)股票指數(shù)無(wú)法精準(zhǔn)預(yù)測(cè)湿右,而由于SHA1運(yùn)算對(duì)輸入的敏感特性赏僧,導(dǎo)致幸運(yùn)數(shù)字lucky是不可預(yù)測(cè)的大猛!因此,以上算法保證了抽簽的公平性淀零。此外挽绩,當(dāng)股票指數(shù)公布后,任何同學(xué)都可以根據(jù)以下源碼重復(fù)進(jìn)行抽簽驾中,抽簽的流程是完全公開的唉堪。
### 抽簽代碼
from googlefinance.get import get_code
from hashlib import sha1
NUM = 441
NASDAQ = #2019年5月4日納斯達(dá)克開盤指數(shù) https://finance.yahoo.com/quote/%5EIXIC/
DJI = #2019年5月4日道瓊斯開盤指數(shù) 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}位同學(xué)入選模聋!'.format(TheChosenOne))
再次說(shuō)明:有些同學(xué)不理解為什么要搞這么復(fù)雜的抽簽,直接隨機(jī)數(shù)不就了事了嘛唠亚。然而链方,隨機(jī)數(shù)的弊端是無(wú)法證明是否是黑箱操作。以上方法通過不可預(yù)知的股票指數(shù)灶搜,以及算法上的可重復(fù)可驗(yàn)證性祟蚀,從技術(shù)上杜絕了黑箱操作。
結(jié)果公布:NASDAQ = 8092.88 DJI = 26379.14割卖,代入以上程序前酿,得到以下幸運(yùn)同學(xué)名單: