首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一组规则匹配卡的算法

问一组规则匹配卡的算法
EN

Stack Overflow用户
提问于 2012-08-21 19:09:42
回答 1查看 1.7K关注 0票数 2

我遇到了一个特殊的问题,我似乎无法解决这个问题。我马上就进去。

问题是将一组卡片与一套规则相匹配。

可以将一组规则定义为字符串。它由<suit>:<value>的逗号分隔的元组组成。例如,H:4, S:1应该匹配四个红心和四个黑桃。通配符也可能是通配符,例如,*:*匹配任何卡,D:*匹配钻石套装中的任何卡,*:2匹配任何西装中的两张。规则可以与逗号相结合:如果*:*,*:*,H:4持有2张随机卡片和4张红心牌,那么它将匹配一组卡片。

到目前一切尚好。为此编写一个解析器是简单而直接的。这是棘手的部分。

为了方便地组合这些规则,还可以使用另外两个构造来表示适合性和价值。这些是< (诉讼和价值合法)和+n (仅对价值合法),其中n是一个数字。<的意思是“与以前的匹配相同”,而+n的意思是“比上一次匹配高n”。举个例子:

代码语言:javascript
复制
*:*, <:*, *:<

意思:匹配任何一张牌,然后匹配一张与第一次匹配相同的牌,下一次匹配另一张与第二次匹配值相同的牌。这只手会匹配:

代码语言:javascript
复制
H:4,H:8,C:8

因为四颗心和八颗心是同一套西装,而八颗心和八颗球杆的价值是相同的。

只要所有规则匹配,就允许拥有更多的卡(因此,将C:10添加到上面将仍然符合规则)。

我解决这一问题的第一种方法基本上是取一组应该匹配的卡片,尝试将第一条规则应用于它。如果匹配,我将转到下一个规则,并尝试从一组卡片中匹配它,以此类推,直到所有规则都匹配,或者我找到一个不匹配的规则。这种方法(至少)有一个缺陷,请考虑上面的示例:*:*,<:*,*:<,但是使用这个顺序的卡:H:8,C:8,H:4。

  • 它将与第一个规则的H:8相匹配。Matched: H:8
  • 接下来,它试图找到一个与之相同的西装(红心)。有四颗心。Matched: H:8, H:4
  • 接下来,它希望找到一个值相同的卡片(4),但是失败了。

我不想像上面的例子那样,用命令的方式对结果产生任何影响。如果我能想到任何与任何规则都有效的伟大策略,我就可以对这组卡片进行排序。

我不知道牌的数量或号码的规则,所以蛮力的方法是不可行的。

感谢您阅读了这篇文章,我非常感谢您的任何建议或见解。

EN

回答 1

Stack Overflow用户

发布于 2012-08-21 19:30:10

你的问题实际上是一个订购问题。下面是一个简单的版本:

给定数字和模式的输入序列,重新排序,使它们符合模式。模式可以包含"*",意思是“任意数字”和">",意思是“大于前一个数字”。

例如,给定模式**>和序列10 10 2 1存在这样的顺序,它是10 1 2 10。一些输入可能没有输出,其他的1,甚至其他许多(认为输入101021和模式** *)。

我想说的是,一旦你有了这个简化的问题的解决方案,切换到你的问题只是一个添加另一个维度和一些运算符的问题。对不起,我没有得到更多的帮助。

乐。请记住,如果允许的字符符号是有限的(即4)和允许的数字(即9),事情可能会变得更容易。

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12061439

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档