如何停止/冻结/暂停不稳定的 RAND / RANDBETWEEN / RANDARRAY?

如何解决如何停止/冻结/暂停不稳定的 RAND / RANDBETWEEN / RANDARRAY?

是否有一种简单的方法(解决方法)如何在谷歌电子表格 (?)

  • 没有脚本
  • 无插件
  • 没有宏

在构建密钥生成器的情况下,我们需要处理多个 =RAND() 输出,每次单元格更改都会重新计算,而那些 =RANDARRAY() 数字不能停留在我们的工作表中保留更长的时间,我们会不断对其进行编辑。

那里有一个有问题的冷冻插件和许多非通用的脚本变体,需要安装和一定程度的修改/知识,那么如何以旧方式做到这一点?

解决方法

先来看看狐狸怎么说

=WHATTHEFOXSAY()

是一个独特的复活节彩蛋谷歌表功能(由 @kishkin 发现),它根据用户需求随机生成一个预设的文本字符串,这是一个大问题,因为虽然这一代是随机,重新计算不受 onEditonChangeonOpen 事件的影响,所以通过一些调整,我们可以在不使用 volatile 的情况下生成一个随机数无法冻结/暂停的 RAND()RANDBETWEEN()ARRAYRAND() 等函数

狐狸只会说这些短语:

A-oo-oo-oo-ooo!
Hatee-hatee-hatee-ho!   
Wa-pa-pa-pa-pa-pa-pow!  
A-bubu-duh-bubu-dwee-dum    
Fraka-kaka-kaka-kaka-kow!   
Jacha-chacha-chacha-chow!   
Gering-ding-ding-ding-dingeringeding    
Joff-tchoff-tchoff-tchoffo-tchoffo-tchoff!  
    

例如。我们用这个函数得到的是 8 次随机中的 1 次,这并不多,所以我们需要放大它(假设按 9 个狐狸尾巴的顺序)。遗憾的是 ARRAYFORMULA 不支持函数,因此我们需要构造 {} 一个数组:

={WHATTHEFOXSAY(); WHATTHEFOXSAY(); WHATTHEFOXSAY();
  WHATTHEFOXSAY(); WHATTHEFOXSAY(); WHATTHEFOXSAY();
  WHATTHEFOXSAY(); WHATTHEFOXSAY(); WHATTHEFOXSAY()}

然后我们将这种狐狸语言转换成数字,如:

=INDEX(LEN(
 {WHATTHEFOXSAY(); WHATTHEFOXSAY(); WHATTHEFOXSAY();
  WHATTHEFOXSAY(); WHATTHEFOXSAY(); WHATTHEFOXSAY();
  WHATTHEFOXSAY(); WHATTHEFOXSAY(); WHATTHEFOXSAY()}))

接下来,我们需要一个开关。没什么特别的,只是一个简单的 IF 语句和一个复选框:

=ARRAYFORMULA(LEN(IF(A1=TRUE,{WHATTHEFOXSAY(); WHATTHEFOXSAY(); WHATTHEFOXSAY();
  WHATTHEFOXSAY(); WHATTHEFOXSAY(); WHATTHEFOXSAY();
  WHATTHEFOXSAY(); WHATTHEFOXSAY(); WHATTHEFOXSAY()},{WHATTHEFOXSAY(); WHATTHEFOXSAY(); WHATTHEFOXSAY();
  WHATTHEFOXSAY(); WHATTHEFOXSAY(); WHATTHEFOXSAY();
  WHATTHEFOXSAY(); WHATTHEFOXSAY(); WHATTHEFOXSAY()})))

https://i.imgur.com/qIpobyO.png

这将使我们能够通过切换复选框来完全控制重新计算。最后一步是通过将所有数字与 PRODUCT 相乘来增加我们的随机性的更多变化来扩大我们最初的 1/8 机会,为了更有趣,我们将其乘以 PI 的 3 次幂:

=ARRAYFORMULA(PI()^3*PRODUCT(LEN(IF(A1=TRUE,{WHATTHEFOXSAY(); WHATTHEFOXSAY(); WHATTHEFOXSAY();
  WHATTHEFOXSAY(); WHATTHEFOXSAY(); WHATTHEFOXSAY();
  WHATTHEFOXSAY(); WHATTHEFOXSAY(); WHATTHEFOXSAY()}))))

https://i.imgur.com/MqkvTEN.png



无限刀片作品

到目前为止,我们似乎并没有创建一些有用的东西……一个带有一些随机数字来回循环的复选框(此时根本不是随机的)……所以让我们转到下一个等级。我们的真正目标是创建一串数字,从中提取某些部分并将它们转换为最终输出。为此,我们需要利用 SEQUENCE 的力量TRANSPOSE 获得额外力量:

=TRANSPOSE(SEQUENCE(5,4,3,2))

这转化为一个 5 列乘以 4 行的网格,其中第一个单元格以数字 3 开始,每个下一个单元格(按列)的值都大 2

https://i.imgur.com/TEARjgg.png

现在让我们定义我们的最终输出:

  • 3x 唯一字符串
  • 每个字符串有 16 个字符
  • 使用从 09
  • 的数字
  • 以及从 af
  • 的小写字母>

此时我们的 SEQUENCE 将如下所示:

=TRANSPOSE(SEQUENCE(16,29,73))

16 = columns
3  = rows
29 = starting point
73 = stepping

对于第三个和第四个参数(29 & 73),我们可以使用一些不错的 prime numbers 并将我们的整个序列再次乘以 {{1}额外的混乱。我们还需要将我们的数字输出转换为纯文本字符串以避免 PI()^3 表示法,因此我们使用 1.79769E+308

TEXT

https://i.imgur.com/xZaf7F1.png

此时,我们在整个网格中的数字分布非常好



终极十六进制/密码生成器

那里的每个字符都有自己的代码。您可以通过在工作表中运行此 AF 来检查它:

=ARRAYFORMULA(TEXT(PI()^3*PRODUCT(LEN(IF(A1=TRUE,{WHATTHEFOXSAY(); WHATTHEFOXSAY(); WHATTHEFOXSAY();
  WHATTHEFOXSAY(); WHATTHEFOXSAY(); WHATTHEFOXSAY();
  WHATTHEFOXSAY(); WHATTHEFOXSAY(); WHATTHEFOXSAY()})))*
 TRANSPOSE(SEQUENCE(16,73))*PI()^3,"0"))

=ARRAYFORMULA({{"character","code"};
 {CHAR(SEQUENCE(2500,1,33)),SEQUENCE(2500,33)}})

为了我们的示例目的,我们需要 ROW(48:57) = 0-9 ROW(65:90) = A-Z ROW(97:122) = a-z ROW(1040:1071) = А-Я ROW(1072:1103) = а-я ROW(913-937) = Α-Ω ROW(945-969) = α-ω 0-9 的字符代码:

a-f

我们将它放入数组 ROW(48:57) = 0-9 ROW(97:102) = a-f 并按降序排序(这是因为我们不想锁定自己无法到达列表中位置较低的字符)。然后我们用 {}JOIN 分隔符准备好进行正则表达式:

|

https://i.imgur.com/e2ryNfb.png

基本上,这个想法是在我们的数字网格中从上面连接的字符串中=JOIN("|",SORT({ROW(48:57); ROW(97:102)},)) 首先找到数字,以防万一没有匹配,我们添加REGEXEXTRACT回退与一些数字({ {1}}(在本例中)来自我们的范围:

IFNA

https://i.imgur.com/Ug2UGEJ.png

并召唤 102 个角色:

=ARRAYFORMULA(IFNA(REGEXEXTRACT(
 TEXT(PI()^3*PRODUCT(LEN(IF(A1=TRUE,"0"),JOIN("|",))),102))

https://i.imgur.com/fssIdtC.png

现在最后一步是用查询粉碎它并删除剩余的空格 - 更多关于查询粉碎here

CHAR

https://i.imgur.com/mI7jt0M.png


总结

  • 那些字符串真的是随机的吗? ofc 不是 - 它们只是“足够随机”,因为我们知道“熵”规则,但祝你好运用手破解它......
  • 主要的关键点是没有发生第 3 方重新计算,因此值保持暂停状态并在切换复选框时生成新值
  • 这些字符串会在一段时间内重复吗? - 是的,它们可以,就像普通的 =ARRAYFORMULA(CHAR(IFNA(REGEXEXTRACT( TEXT(PI()^3*PRODUCT(LEN(IF(A1=TRUE,102))) 函数
  • 是否有可能一次性生成两个相同的密钥? - 是的,它可能会发生,但可以通过多种方式来降低几率或引入 =ARRAYFORMULA(SUBSTITUTE(FLATTEN(QUERY(TRANSPOSE( CHAR(IFNA(REGEXEXTRACT(TEXT(PI()^3*PRODUCT(LEN(IF(A1=TRUE,102))),9^9))," ",)) 或添加更多狐狸尾巴
  • 请注意这个特殊场合:onOpen 事件将在每次复选框切换后重新计算 RAND() 一次!!因此,如果您需要使用冻结值,建议在每次切换复选框后使用 UNIQUE() 键刷新电子表格

如果您希望在特定时间段内自动生成新的字符串,您可以插入易失性函数 WHATTHEFOXSAY()F5 - 但请注意,每次编辑任何单元格或当您不编辑任何内容时,每分钟/每小时
(取决于..//文件>电子表格设置)

https://i.imgur.com/Gn4z6J5.png

如何不对每个单元格更改重新计算并在每个复选框切换或每 6 分钟重新计算一次?每周一次?每个奇数月?只有周一和周三吗?每 11 小时一次? 可能!我们需要一个更简单的 TODAY() 语句放置在电子表格中的任何位置,它将承载我们的逻辑门并输出数组 NOW() 星座中的值,以便我们可以参考我们的狐狸公式到不包含具有易失性元素的公式的单元格。 example

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 <select id="xxx"> SELECT di.id, di.name, di.work_type, di.updated... <where> <if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 <property name="dynamic.classpath" value="tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-