矩阵组合逻辑

2023-11-24

注意:**请阅读所有其他相关问题:**

这是我第一次和第二次尝试提出这个问题:

  • 确定测试矩阵结果的有效方法
  • 笛卡尔积是最好的方法吗

问题是这样的:

  • 我有几个(比如 20 个)布尔验证( true / false )
  • 所有布尔验证作为一个整体也有一个验证结果

我正在尝试找到测试所有验证以及验证结果的最佳解决方案。我正在研究一个矩阵来保存所有可能的组合,但这可能有点矫枉过正。

下面是一个示例 (1 - 20):

  • test_1 = 有 30 次击杀
  • test_2 = 已找到地图 1
  • test_3 = 已掌握 1 级
  • test_4 = 已达到 Grunt 状态
  • test_5 = 有攻击武器
  • test_6 = 有刀
  • test_7 = 有手榴弹
  • test_x = 等等...

因此,当玩家将所有这些验证都设为 TRUE 时,我就可以给出关卡结果

  • 如果 test_1、test_2、test_3(三者的任意组合):级别 = 绿色

所有组合为 ( 15 ):

  • test_1
  • test_2
  • test_3
  • 测试_1、测试_2
  • 测试_1、测试_3
  • test_2、test_1(重复的可以跳过此)
  • 测试_2、测试_3
  • test_3、test_1(重复的可以跳过此)
  • test_3、test_2(重复的可以跳过此)
  • 测试_1、测试_2、测试_3
  • test_1、test_3、test_2(重复的可以跳过此)
  • test_2、test_1、test_3(重复的可以跳过此)
  • test_2、test_3、test_1(重复的可以跳过此)
  • test_3、test_1、test_2(重复的可以跳过此)
  • test_3、test_2、test_1(重复的可以跳过此)

所以独特的组合是( 7 而不是 15 ):

  • test_1
  • test_2
  • test_3
  • 测试_1、测试_2
  • 测试_1、测试_3
  • 测试_2、测试_3
  • 测试_1、测试_2、测试_3

现在,我正在尝试寻找最佳解决方案,为所有 20 个验证找到独特的组合,并从该矩阵中得出级别验证。

UPDATE:

另外,我只需要找到真正的组合,这样您就可以像这样阅读独特的组合:

  • test_1
  • test_2
  • test_3
  • 测试_1、测试_2
  • 测试_1、测试_3
  • 测试_2、测试_3
  • 测试_1、测试_2、测试_3

验证测试的布尔值结果

  • 真,假,假
  • 假、真、假
  • 假,假,真
  • 对,对,错
  • 对,错,对
  • 假、真、真
  • 真实,真实,真实

因此,任何这些组合都将是绿色级别。

我还需要知道测试验证的顺序以及用于比较级别分配的矩阵顺序。因此,对于 GREEN 级别,我只需要测试 1、2 和 3 的验证结果组合矩阵。因此我可以忽略测试 4 - 20

更新#2:

我知道这看起来像一个简单的 OR 条件,但我想取出组合逻辑来将级别设置为矩阵。我可以使用组合矩阵来确定级别逻辑,而无需编写额外的代码或修改代码本身中的当前逻辑。我只想比较给定测试集的验证结果,并为这些结果分配一个级别。验证组合的不同排列将导致不同的级别分配。

我知道我可以在代码本身中添加组合逻辑,但由于此逻辑看起来非常不稳定,并且认为这可能提供更灵活的解决方案。 建议?


(为了清楚起见,删除了我之前的两个答案)

在您上次编辑后,我不想直接回答,而是首先确保 100% 理解“电平检测算法“ 你要。

如果我理解得很好,您希望定义/维护一个简单的配置结构,告诉哪些测试给出哪个级别。

例如使用关联数组:

array(
  'green' => array('test1', 'test2', 'test3'),
  'orange' => array('test2', 'test3', 'test5')
  ...
  );

其含义是:如果满足列表中的一项或多项测试,则将该级别(数组键)分配给玩家。这样的逻辑可以很容易地涵盖相当多的组合,并且可以避免处理巨大的矩阵。

也许您想扩展逻辑来告诉,例如,测试列表中至少有 N 个测试得到满足。

array(
  'green' => array(
      'tests' => array('test1', 'test2', 'test3'),
      'nb_required' => 2
    ),
  ...
  );

那是你要的吗?

顺便说一句,你为什么不使用经典的 XP/升级系统呢? :-p

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

矩阵组合逻辑 的相关文章

随机推荐

  • Jquery 中的 Ajax.updater 相当于什么?

    请让我知道 Jquery 中以下原型代码的等效内容 var myAjax new Ajax Updater abc billing add bill detail method get parameters pars insertion I
  • tkinter 窗口获取 x、y、几何/坐标,无需窗口顶部

    我在 python 3 中使用 tk 尽管我假设这适用于任何语言 我正在寻找标题栏之外的 tk 窗口的当前 x y 坐标 import tkinter root tkinter Tk 然而 使用root winfo y 给我坐标 包括标题栏
  • 无法使用 jquery/javascript 在 html5 视频中设置 video.currentTime

    无论是从控制台还是从我的标签中 我都无法使用 JavaScript 设置 html5 视频元素的当前时间 我也在使用 jQuery 但我不知道这是否与该问题相关 我在 Ubuntu 上使用 Google Chrome 24 0 1312 5
  • 创建脚本语言

    有人可以指导我创建针对 WSH Windows 脚本主机 的脚本语言的正确方向吗 我用谷歌搜索过它 但与我几个月前最初搜索它时相比 与此相关的链接似乎要少得多 谢谢 该产品现在称为 Windows Script Host MSDN 文档表明
  • 在 (x) 个字符后剪切文本

    这是在 WordPress 中 不确定这有什么区别 这段 php 输出帖子标题 它是简单文本 长度最多可达 100 个字符 我想要的是如果输出的字符超过 20 长以显示 或根本不显示任何内容 Thanks 检查字符串长度后strlen us
  • delete[] 提供了一个修改后的新指针。未定义的行为?

    我在同行代码评审会议期间看到了如下一些代码 char s new char 3 s a s b s 0 delete s this may or may not crash on some or any day 首先 我知道在标准 C 中
  • 使用 Emacs 在尚未打开的文本文件中递归查找和替换

    作为后续这个问题 它试图找出如何做这样的事情 这应该很容易 这尤其阻止我更习惯使用 Emacs 而是启动我已经熟悉的编辑器 我在编辑多个文件时经常使用这里的示例 在 Ultraedit 中 我会先按 Alt s 然后按 p 显示一个对话框
  • 构建状态管理存储(ngrx/redux)。扁平代表数据,还是嵌套代表视图?

    我正在使用 ngrx 存储来维护应用程序状态 使用 normalizr 来展平来自 API 调用和 Immutable 的数据 到目前为止 它运行得非常好 但我正在处理一些更复杂的数据关系 我想知道如何继续构建商店 为了简化事情 我有两组对
  • Pandas 中的递归 SQL CTE 查询?

    如何优雅地将下面的递归 SQL 查询移植到 Pandas python 代码中 不知何故 如果不编写自己的递归函数 我就看不到一种直接的方法 Python 示例代码 import datetime import numpy as np im
  • Swift 过滤字典错误:无法将“[(_, _)]”类型的值分配给“[_ : _]”类型的值

    我正在尝试快速过滤字典 var data String String data data filter 0 1 Test 上面的过滤器代码在 Swift 2 下编译 但会产生以下错误 无法将 String String 类型的值分配给 St
  • Material Design 不设置警报对话框样式

    我已将 appCompat 材质设计添加到我的应用程序中 但警报对话框似乎没有使用我的主色 primaryDark 或强调色 这是我的基本风格
  • 如何在没有空终止符的情况下初始化 char 数组?

    char 数组是网络消息的一部分 其长度定义明确 因此不需要空终止符 struct Cmd char cmd 4 int arg struct Cmd cmd ABCD 0 this would be buffer overflow 如何初
  • 从公共类中的 AsyncTask 更新 UI 线程

    我试图将一些 AsyncTask 类拆分为公共 单独 函数 这样我就不必重写这么多代码 除了一个非常重要的方面之外 我几乎拥有了它 AsyncTask 函数通过对服务器进行 php 调用来编译 ArrayList 当此列表完成后 我需要更新
  • 使用 mod_remoteip 获取 Apache 2.4 访问日志以显示客户端 IP,而不是使用 Varnish 的 127.0.0.1

    在我的一生中 我无法让 mod remoteip 在我的 Apache 访问日志中获取客户端 IP 我正在使用在 Apache 2 4 7 之前安装的 Varnish 4 进行 Virtualmin 设置 你如何让它发挥作用 我终于在日志中
  • 将 event.target 与现有 jQuery 对象匹配

    我怎样才能做到这一点 event target返回一个 HTML 对象 我的元素是一个 jQuery 对象 除了比较 ID 或类之外 还有更好的方法来确定 event target my jquery object 吗 我想确保它是同一个对
  • 是否保证事件处理程序在调用 AJAX 回调之前完成?

    假设我有一个事件处理程序 它向服务器发出两次 AJAX 调用 foo click function get bar function alert Hello get baz function alert World 我意识到调用回调的顺序是
  • 双三次插值?

    我浏览了互联网 就双三次插值而言 我找不到一个简单的方程 维基百科关于该主题的页面不是很有帮助 那么有没有简单的方法来学习双三次插值的工作原理以及如何实现它 我用它来生成柏林噪声 但使用双线性插值对于我的需求来说是不稳定的 我已经尝试过 如
  • C++ 和表格格式打印

    我正在寻找如何在 C 中打印以便固定表列宽度 目前我已经使用空格和 and 但是一旦数字达到两位数 所有对齐都会变坏 NODE ORDER PARENT 0 0 1 7 7 2 1 0
  • 根据批处理中的 zip 文件重命名提取的文件

    我有多个 zip 文件 其名称例如 001 zip 002 zip 003 zip 并且有可能达到 999 zip 每个 zip 文件只有一个文本文件 我想使用 Batch 提取每个 zip 文件 然后将提取的文本文件重命名为 zip 的文
  • 矩阵组合逻辑

    注意 请阅读所有其他相关问题 这是我第一次和第二次尝试提出这个问题 确定测试矩阵结果的有效方法 笛卡尔积是最好的方法吗 问题是这样的 我有几个 比如 20 个 布尔验证 true false 所有布尔验证作为一个整体也有一个验证结果 我正在