我在做骰子游戏。有5个骰子,我有所有的数值,我需要确定他们是否构成一个满屋(3的一个和另一个),小直(1-4,2-6或3-6)或一个大的直线(1-5,2-6)。
也许处理这个问题的最好方法似乎是使用正则表达式。
有人知道我会如何用regex来表示这些规则吗?
或者如果您能提供更好的解决方案,我会很感激的。
示例:
编辑
修改了措辞,强调这是我缺乏经验的观点。
我知道如何使用代码来实现这一点,但这似乎是一个冗长的解决方案,我想知道是否有一种更简单的方法。
发布于 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对
发布于 2011-06-26 10:22:38
我会排序所有的数字递减,然后在每个值上做一些线性标准匹配,不管是在int[]还是字符串中。
发布于 2011-06-26 11:07:27
您可以始终执行LINQ
聚合查询,并计算相同卡的数量。它将类似于(无法测试):
var query = from card in hand
group card by card into groupedCards
select new { Card = groupedCards.Key, Count = groupedCards.Count() };
这样,你就可以很容易地知道你是在处理一个可能的直的(或根本没有),一对,一个三重,等等。
我不是LINQ
专家,目前我无法测试这段代码,所以我不确定它是否会按原样编译,但它可能会帮助您或给您一个如何处理当前问题的想法。
例如:
https://stackoverflow.com/questions/6483346
复制相似问题