1
lhx2008 2020-01-09 09:56:33 +08:00 via Android 1
random.shufile([x for x in range(1, 1025)])[:3]
|
2
wolfie 2020-01-09 10:01:45 +08:00 1
|
3
psychoo 2020-01-09 10:04:07 +08:00 1
3 个预定未来时刻的比特币价格%1024
|
4
ferock 2020-01-09 10:07:40 +08:00 1
这个世上有真随机的事情吗?如果不纠结这点,Rand 不就行了。。。
|
5
Mutoo 2020-01-09 10:18:35 +08:00 1
提前 shuffle 好一个 1 到 1024 的数组,并带上时间戳,然后进行 md5 并只把 md5 发论坛上。
到期后公布这个数组就行了,大家可以自行 md5 验证。 以上作法有一个小问题,就是 LZ 提前知道结果,有可能进行抢楼,所以最后可以在这个数组上取一个不可控因素作偏移量。也就是传统的抽取一楼的方法。 |
6
BiteTheDust 2020-01-09 10:20:46 +08:00 1
直接 rand 一个正常的 rand 函数 在随机范围内的概率都应该是要求非常近似的 你自己动脑筋随机出来的 反而可能做不到公平
|
7
sockpuppet9527 2020-01-09 10:35:05 +08:00 1
直接回复的
可以参考下这篇论文 P. L'Ecuyer, "Maximally Equidistributed Combined Tausworthe Generators", Mathematics of Computation, 65, 213 (1996), 203--213. 有内核工具的 random 是参考这篇文章写的,量足够大的情况下它能保证公平以及范围足够大。 fio 实现 : https://github.com/axboe/fio/blob/master/lib/rand.c fio 的随机算法目的是在 randrw 的情况下保证全盘公平覆盖。。所以和你的目的差不多,你只需要取三次即可 |
8
xatest OP |
9
xiao17174 2020-01-09 11:00:52 +08:00 1
# -*- coding: UTF-8 -*-
import random #明天开盘时的上证指数*100 的值 sh_value = 3083.39 #楼层总数 msg_count=1234 #初始化随机值 random.seed(sh_value * 100) seed2 = random.randint(1,9999) random.seed(seed2) //开始抽奖 print "第一个中奖者楼层:%d" %random.randint(1,msg_count) print "第二个中奖者楼层:%d" %random.randint(1,msg_count) print "第三个中奖者楼层:%d" %random.randint(1,msg_count) print "第四个中奖者楼层:%d" %random.randint(1,msg_count) #如果上面有重复,后者用候补顶替 print "候补中奖者一:%d" %random.randint(1,msg_count) print "候补中奖者二:%d" %random.randint(1,msg_count) |
11
xiao17174 2020-01-09 11:10:02 +08:00
解释一下:
1.原理是给伪随机数生成器一个确定的种子,那么他的随机数生成也变得确定了.保证结果可重现. 2.用这个算法,就要等到明天 9 点 30 开奖,如果想立即开奖,也可以改成今晚 12 点的比特币价格或者其它国家的股市收盘价格(建议用开 /收盘价格,它是一个定值,而比特币时刻在变). 3.运行环境可以用在线 python 工具(比如 https://c.runoob.com/compile/9)或者指定 python 版本来保证结果可重现. 4.可以再多加几层混淆,但是我觉得没必要了. |