首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >骰子问题(满屋直认)

骰子问题(满屋直认)
EN

Stack Overflow用户
提问于 2011-06-26 10:15:30
回答 7查看 7.5K关注 0票数 4

我在做骰子游戏。有5个骰子,我有所有的数值,我需要确定他们是否构成一个满屋(3的一个和另一个),小直(1-4,2-6或3-6)或一个大的直线(1-5,2-6)。

也许处理这个问题的最好方法似乎是使用正则表达式。

有人知道我会如何用regex来表示这些规则吗?

或者如果您能提供更好的解决方案,我会很感激的。

示例:

  • 满屋= 44422或11166或12212等
  • 小直线= 12342或54532等等
  • 大直角= 12345或52643等

编辑

修改了措辞,强调这是我缺乏经验的观点。

我知道如何使用代码来实现这一点,但这似乎是一个冗长的解决方案,我想知道是否有一种更简单的方法。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2011-06-26 10:55:49

不知道c#,但在脚本语言中,我会选择regexp路径。对于每一方,计算它在组合中发生的次数,并将结果连接在一起。例如,对于组合12342,计数器字符串将是121100。然后将计数器字符串与以下模式匹配:

/5/ =一种类型的5 /4/ 4/20*3 x 30*2/=满屋/1{5}/ =大型直/12{4}/ =小直/3/ =3种/2013*2/ =2对/2/ =1对

票数 4
EN

Stack Overflow用户

发布于 2011-06-26 10:22:38

我会排序所有的数字递减,然后在每个值上做一些线性标准匹配,不管是在int[]还是字符串中。

票数 5
EN

Stack Overflow用户

发布于 2011-06-26 11:07:27

您可以始终执行LINQ聚合查询,并计算相同卡的数量。它将类似于(无法测试):

代码语言:javascript
运行
复制
var query =  from card in hand
             group card by card into groupedCards
             select new { Card = groupedCards.Key, Count = groupedCards.Count() };

这样,你就可以很容易地知道你是在处理一个可能的直的(或根本没有),一对,一个三重,等等。

我不是LINQ专家,目前我无法测试这段代码,所以我不确定它是否会按原样编译,但它可能会帮助您或给您一个如何处理当前问题的想法。

例如:

  1. if count query =5:我们处理的是一个空手,一个刷新或一个直的=>运行特定的刷新/直逻辑。
  2. 如果计数查询=4:我们处理的是一个单对。
  3. ,如果计数查询=3 :我们处理的是一个双对,或者一个三重=>,如果最大计数数=3,那么如果计数查询=2:我们处理的是一个满屋/扑克。如果最大计数=4,那么扑克
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6483346

复制
相关文章

相似问题

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