使用方法
- 打开页面默认就带示例:候选名单是「小明、小红、小刚、小美」四行,种子 24680,瓶子已经高亮指向「小明」,你不需要先输入任何东西。
- 在候选框里每行写一个名字,支持任意多行;在种子框填任意非负整数;相同种子与名单必然得到同一指向。
- 在候选框里按 Ctrl 加回车(Mac 上是 Cmd 加回车),或在种子框按回车,也能立即旋转,不必点按钮。
- 点「转一下」按钮,页面按固定种子算法从名单里取出指向的那一位并高亮;点「复制指向者」把该名字复制到剪贴板。
- 候选名单为空,或种子不是整数时,会点名当前字段提示你修正,不会硬凑出一个空指向。
- 本页不联网、不写本地存储,刷新即回到默认示例,所有计算都在你自己的浏览器里完成,输入内容不会离开设备。
这个 转瓶子 能解决什么
这个工具 解决的是「想从一群人里随机选一个,又希望结果能复现」这个具体需求。普通随机每次都变,没法复现;本工具用固定种子,同样的种子永远指向同一人,方便分享与复核,也方便聚会时定规则。
第一类用途是聚会抽签。谁是今晚买单的、谁先发言、谁去拿外卖,把名单丢进来转一下,结果公开可复现,避免有人怀疑暗箱。
第二类用途是破冰游戏。团建、班会用瓶子指向来决定分组或表演,固定种子让同一轮结果可截图分享,也不会因重开页面变卦。
第三类用途是趣味决策。纠结去哪家店、看哪部片,把选项当候选转一下,把随机变成仪式感,比抛硬币更有参与感。
第四类用途是教学演示。讲伪随机、线性同余、种子概念时,这一指向结果是个直观又便宜的样例,配合下方对照表能看到不同种子对应的指向。
第五类用途是抽奖与彩蛋。产品里做随机中奖、幸运用户彩蛋,用种子保证可回归测试,不会出现「昨天能复现今天复现不了」的尴尬。
第六类用途是游戏与谜题。桌游、解谜需要可复现的随机选项,把种子作为关卡参数,玩家输入同一种子得到同一指向,便于交流攻略。
第七类用途是数据标注样本。需要给文本随机配一个候选标签做样例时,固定种子让标注结果可重复,方便交叉验证与审计。
第八类用途是公平性演示。讲解「可复现随机」与「真随机」区别时,本工具用同一颗种子稳定指向,能直观展示确定性与随机性的反差。
值得一提的是,本页所有计算都在本地完成,不联网也不上传。你可以放心填入任意名单与种子,结果不会被任何服务器记录。
原理和变量
转瓶子 的核心是「线性同余取数加下标映射」,同一种子必然指向同一人,可被手算复核。算法为:取一个状态 s 初值为种子;先更新 s 等于(s 乘 1103515245 加 12345)再与 0x7fffffff 做位与,得到新的三十二位正整数;再用 idx = 向下取整(s 除以 2147483647 乘候选人数),从候选数组里取出对应那一位作为瓶口落点。如此只取一次,得到被指向的人。
为什么要固定种子?因为纯随机无法复现,而抽签、教学、测试都需要「同样的输入得到同样的输出」。下面变量表说明各环节含义,方便你对照手算。
| 变量 | 含义 | 说明 |
|---|---|---|
| seed | 随机种子 | 非负整数,决定序列 |
| list | 候选数组 | 每行一个名字 |
| s | 状态量 | 一次迭代更新 |
| idx | 指向下标 | 落入 0 到人数减一 |
| hit | 被指向者 | 名单里的人 |
完整示例
下面这组示例全部由页面算法原样得出,可直接对照你的手算。候选「小明、小红、小刚、小美」共四人,种子 24680:s 更新后取 idx 得 0,指向名单第 0 位「小明」,于是瓶子高亮指向小明。与上方结果区、下方卡片和对照表完全自洽,相同种子必然复现,可逐人复核。
如果你想验证手算,只要把种子按「s 更新、取 idx、查名单」三步算一次,必然和本工具一致。这个线性同余法也是你在不支持本页的环境里手动或写脚本复现结果的可靠办法。
种子=24680
候选 4 人
s 更新取 idx
查候选数组
小明(第 0 位)
同种子可复现
示例输入:候选=小明/小红/小刚/小美,种子=24680 瓶子指向:小明(名单第 0 位)
常见种子对照表
下表列出几组种子对应的指向结果(名单固定为小明、小红、小刚、小美,共 14 行),前 12 行直接展示,点「加载更多」展开剩余项。你可以一键导出 CSV(带 BOM,Excel 直接认中文)或复制 TSV 粘进表格软件。表里所有结果都由本页同一算法得出,可复现、可复核。
| 随机种子 | 指向候选 |
|---|---|
| 24680 | 小明 |
| 1 | 小刚 |
| 999 | 小红 |
| 2024 | 小明 |
| 88888 | 小红 |
| 42 | 小刚 |
| 777 | 小红 |
| 100000 | 小红 |
| 55 | 小红 |
| 31415 | 小明 |
| 123 | 小明 |
| 9 | 小刚 |
| 65535 | 小明 |
| 271828 | 小刚 |
结果边界与错误提示
- 候选名单为空或不止一行空白时,提示「候选名单不合法:请至少填写一个候选」,页面不会自作主张编出一个空指向。
- 候选名单只有一行空白时,提示「候选名单不合法:请至少填写一个有效候选」,避免指向一个空名字。
- 随机种子为空或非非负整数时,提示「随机种子不合法:请输入非负整数」,种子决定指向,缺了无法复现。
- 同一组种子与名单必然指向同一人,这是固定算法特性,并非缓存;换种子才会换指向。
- 结果区与错误区都带 role="alert" 语义,内容一变就会被屏幕阅读器播报;所有生成本地完成,不联网也不写存储,刷新即还原默认示例。
- 名单里的重名会被当作不同行分别计数,指向按行下标确定,因此重名不影响算法但可能指向同名的两人之一。
- CSV 导出在文件头写入 UTF-8 BOM(\ufeff),Excel 打开中文不会乱码;TSV 复制是纯制表符分隔文本,粘进任意表格软件都会自动分列。
- 本工具只做指向抽取,不对被指向者做任何评价;名单与指向结果由你自行解释与使用。
常见问题
为什么同样的种子总指向同一个人?
本工具用固定种子的线性同余算法,种子相同则内部状态序列相同,取出的下标必然一致,指向的人也一致。这样你才能在别处手算复核,也方便分享与回归测试。
种子可以随便填吗?
可以。种子是任意非负整数,不同种子对应不同指向;同一种子永远指向同一人。建议记下你喜欢的种子,下次复现同一结果。
能放多少个候选?
数量不限,每行一个即可。下标是对候选人数取模得到的,名单变化会改变指向,因此对照表基于固定的四人名单。
指向是怎么算出来的?
把种子做线性同余更新,再用得到的状态除以最大值乘人数,向下取整得到下标,查候选数组即得被指向者。
我的名单会上传吗?
不会。所有计算只在浏览器本地进行,不联网、不写存储,刷新即还原默认示例,没有任何数据离开你的设备,可以放心填任意名单。
和标准随机有什么不同?
标准随机每次都变且不可复现;本工具用线性同余加固定种子,指向可复现、可审计,更适合需要稳定结果的场景。
导出的 CSV 为什么带 BOM?
因为 Excel 打开无 BOM 的 UTF-8 文件时常把中文显示成乱码,BOM 能让 Excel 正确识别编码。TSV 复制走剪贴板不经文件,所以不需要 BOM。
重名会被算两次吗?
算法按行下标取人,重名的多行各自占一个下标,都可能被指向;指向的是「第几行」而不是「哪个名字」,所以重名时请留意行序。