征集一种对回复抽多个奖的随机算法,回复方案必感谢~

2020-01-09 09:54:14 +08:00
 xatest
我指的是,我发的 /t/635728 这个帖子~
我把回复参与抽奖的资格,最晚截止到今晚 23:59:59,应该按什么随机算法抽 3 个奖?
例如:拿具体数字来说,一共收到 1024 个回复,怎么以一个公正+随机的算法来抽[1,1024]区间的 3 个整数?

凡是回复方案,无论方案好坏必感谢~
1534 次点击
所在节点    问与答
13 条回复
lhx2008
2020-01-09 09:56:33 +08:00
random.shufile([x for x in range(1, 1025)])[:3]
wolfie
2020-01-09 10:01:45 +08:00
每个楼层[用户 + 楼层数]md5
当天博彩、股票或者其他的 md5
对比取最近。
https://www.jianshu.com/p/6577075ee118
psychoo
2020-01-09 10:04:07 +08:00
3 个预定未来时刻的比特币价格%1024
ferock
2020-01-09 10:07:40 +08:00
这个世上有真随机的事情吗?如果不纠结这点,Rand 不就行了。。。
Mutoo
2020-01-09 10:18:35 +08:00
提前 shuffle 好一个 1 到 1024 的数组,并带上时间戳,然后进行 md5 并只把 md5 发论坛上。
到期后公布这个数组就行了,大家可以自行 md5 验证。

以上作法有一个小问题,就是 LZ 提前知道结果,有可能进行抢楼,所以最后可以在这个数组上取一个不可控因素作偏移量。也就是传统的抽取一楼的方法。
BiteTheDust
2020-01-09 10:20:46 +08:00
直接 rand 一个正常的 rand 函数 在随机范围内的概率都应该是要求非常近似的 你自己动脑筋随机出来的 反而可能做不到公平
sockpuppet9527
2020-01-09 10:35:05 +08:00
直接回复的

可以参考下这篇论文 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 的情况下保证全盘公平覆盖。。所以和你的目的差不多,你只需要取三次即可
xatest
2020-01-09 11:00:03 +08:00
xiao17174
2020-01-09 11:00:52 +08:00
# -*- 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)
pangleon
2020-01-09 11:08:51 +08:00
@wolfie 好思路!
xiao17174
2020-01-09 11:10:02 +08:00
解释一下:
1.原理是给伪随机数生成器一个确定的种子,那么他的随机数生成也变得确定了.保证结果可重现.
2.用这个算法,就要等到明天 9 点 30 开奖,如果想立即开奖,也可以改成今晚 12 点的比特币价格或者其它国家的股市收盘价格(建议用开 /收盘价格,它是一个定值,而比特币时刻在变).
3.运行环境可以用在线 python 工具(比如 https://c.runoob.com/compile/9)或者指定 python 版本来保证结果可重现.
4.可以再多加几层混淆,但是我觉得没必要了.
Kelan
2020-01-09 13:59:05 +08:00
@wolfie 这个文章里的方法其实也解决不了他说的所谓插入僵尸号的问题。没必要搞那么复杂的离散化。
xatest
2020-01-09 15:39:57 +08:00
@xiao17174 #11 感谢已发送~

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/636357

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX