filter - Google Sheets 组合骰子的公式

标签 filter split google-sheets-formula flatten google-query-language

情况:我正在创建一个骰子符号“清理”公式,以便组合相似的骰子。例如:“1D6+1D6”将变为“2d6”。使事情变得复杂的是,负掷骰(如“-1D6”)不能汇总到最终结果中(意思是“1D6-1D6”不等于“0”)。为什么?因为 1D6 并不等于每次滚动的相同数字。因此,第一个(附加)骰子可能是“6”,然后惩罚骰子可能是 1,总共 (6-1)=5。

增加了复杂性……这不仅仅适用于 D6。这是整个RPG系列。 D4、D6、D8、D10、D12、D20 和 D100。

所以,我已经非常接近了!但是,公式...很长...就像,我将其复制并粘贴到 MS Word 中,它有整整两页长...你会看到...

https://docs.google.com/spreadsheets/d/14C_n53wgiQL6-rrOl-9IfXPBTMIdnsZxaZ5vmeKXsMU/edit?usp=sharing

(除了最后一分钟的 D10 问题)它有效...但是,我计划将该公式向下拖动至少 500 次,因此它会降低工作表速度。

最终公式按骰子类型分割。 (最终公式只是所有单个骰子公式的 TEXTJOIN)。

虽然我不知道缩短这个时间的解决方案,但我在写这篇文章时确实意识到也许没有必要定义每个骰子。也许按“D”之后和下一个“+”之前的唯一字符串数组排序?!?!

最佳答案

尝试:

=INDEX(REGEXREPLACE(TEXTJOIN("+", 1, FLATTEN(QUERY(TRANSPOSE(QUERY(QUERY(IFNA(TRANSPOSE({
 REGEXEXTRACT(SPLIT(C5, "+"), "^\d+")*1;  REGEXEXTRACT(SPLIT(C5, "+"), "D\d+"); 
 REGEXEXTRACT(SPLIT(C5, "+"), "^-\d+")*1; REGEXEXTRACT(SPLIT(C5, "+"), "D\d+"); 
 REGEXEXTRACT(SPLIT(C5, "+"), "D(\d+)")*1}), 0), 
 "select sum(Col1),Col2,'+',sum(Col3),Col4,Col5 group by Col2,Col4,Col5 order by Col5"), 
 "select Col1,Col2,Col3,Col4,Col5 offset 1", )),,9^9))), " |\+ 0 D\d+", ))

enter image description here

关于filter - Google Sheets 组合骰子的公式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73757619/

相关文章:

PHP:将字符串拆分为数组 foreach char

Python:在定界符后提取特定数量的字符

java - 让 Jersey 2.x 拒绝内容长度不正确的请求的最佳方法?

java - 如何加密过滤器中的响应数据

css - IE6 透明度问题

java - String split() 方法,零和负限制

Google 表格 (RE2) 中的正则表达式 "NOT"

google-sheets - Google 表格功能可对行进行分组和连接

date - 使用单元格格式值的 IF 语句

html - 如何在 3 列中使用过滤器( ionic )