C# 在字符串变量中查找模式
我需要创建一个head或tails项目,其中计算机将随机猜测多达5次,但在第六次时,它将以字符串形式查看playerGuessHistory变量设置,以查看是否可以找到4个entires模式的匹配项。如果找到一个模式,计算机将猜测模式后的下一个字符 例如,给定序列C# 在字符串变量中查找模式,c#,string,pattern-matching,C#,String,Pattern Matching,我需要创建一个head或tails项目,其中计算机将随机猜测多达5次,但在第六次时,它将以字符串形式查看playerGuessHistory变量设置,以查看是否可以找到4个entires模式的匹配项。如果找到一个模式,计算机将猜测模式后的下一个字符 例如,给定序列HHTTH,模式为HHTT,因此计算机将猜测第六圈的H。我唯一的问题是,我很难设置这个项目,这样它就可以查看PlayerGuessHistory,找到模式并猜测历史中的下一个角色。有什么建议吗?创建一个列表并将历史记录加入其中,这样列表
HHTTH
,模式为HHTT
,因此计算机将猜测第六圈的H
。我唯一的问题是,我很难设置这个项目,这样它就可以查看PlayerGuessHistory,找到模式并猜测历史中的下一个角色。有什么建议吗?创建一个列表
并将历史记录加入其中,这样列表中的每个项目都是一个由4个字符组成的字符串(如文本中所示)。然后,当计算机猜测时,从以(myList.StartsWith
-method)字符串开头的列表中选择项目(应该有多个),然后应将H作为下一个字符的次数相加,以及T是下一个字符的次数-计算每个字符的概率,让计算机选择概率最高的一个
这有意义吗?创建一个列表
并将历史记录放入其中,这样列表中的每个项目都是一个由4个字符组成的字符串(如文本中所示)。然后,当计算机猜测时,从以(myList.StartsWith
-method)字符串开头的列表中选择项目(应该有多个),然后应将H作为下一个字符的次数相加,以及T是下一个字符的次数-计算每个字符的概率,让计算机选择概率最高的一个
这有意义吗?首先,如果正面和反面真的是随机的,就像掷硬币的结果一样,这项任务是没有意义的。无论历史上是否有任何可感知的模式,计算机总是以1/2的概率正确地进行下一次投掷。(见附件。) 现在,如果正面和反面不是真正随机的(例如,他们是由一个人以他认为是随机的方式调用正面或反面创建的),那么我们可以让计算机的成功报价高于1/2 我会尝试以下方法:首先,检查历史记录中的频率
- 头后面跟着头
- 头后面跟着尾巴
现在,你可以通过计算“HH->T”等转换来尝试将历史的较长部分考虑在内,并尝试提高成功率。首先,如果正面和反面都是随机的,就像掷硬币的结果一样,这项任务是没有意义的。无论历史上是否有任何可感知的模式,计算机总是以1/2的概率正确地进行下一次投掷。(见附件。) 现在,如果正面和反面不是真正随机的(例如,他们是由一个人以他认为是随机的方式调用正面或反面创建的),那么我们可以让计算机的成功报价高于1/2 我会尝试以下方法:首先,检查历史记录中的频率
- 头后面跟着头
- 头后面跟着尾巴
现在,您可以通过计算转换“HH->T”等,尝试将历史的较长部分考虑在内,并尝试提高您的成功率。这是一个基于我对您需求的理解的小片段。下面的方法将返回对“H”头或“T”尾的一连串猜测。前5次猜测是随机的,然后如果4次猜测的任何序列是HHT,则最终猜测将是“H”
static string HeadsOrTails()
{
string guessHistory = String.Empty;
// Guess heads or tails 5 times
Random random = new Random();
for (int currentGuess = 0; currentGuess < 5; currentGuess++)
{
if (random.Next(2) == 0)
guessHistory += 'H';
else
guessHistory += 'T';
}
// Analyse pattern of guesses
if (guessHistory.Substring(0, 4) == "HHTT" || guessHistory.Substring(1, 4) == "HHTT")
{
// If guess history contains HHTT then make the 6th guess = H
guessHistory += 'H';
}
return guessHistory;
}
static string headortails()
{
string guessHistory=string.Empty;
//猜正面或反面5次
随机=新随机();
对于(int currentGuess=0;currentGuess<5;currentGuess++)
{
if(随机下一个(2)=0)
猜测历史+='H';
其他的
猜测历史+='T';
}
//猜测模式分析
if(猜测历史。子字符串(0,4)=“HHTT”| |猜测历史。子字符串(1,4)=“HHTT”)
{
//如果猜测历史包含HHT,则进行第六次猜测=H
猜测历史+='H';
}
回归历史;
}
这是一个非常简单的实现,只适用于5个随机的初始猜测,但根据需要应该很容易增强。这是一个基于我对您的需求的理解的小片段。下面的方法将返回对“H”头或“T”尾的一连串猜测。前5次猜测是随机的,然后如果4次猜测的任何序列是HHT,则最终猜测将是“H”
static string HeadsOrTails()
{
string guessHistory = String.Empty;
// Guess heads or tails 5 times
Random random = new Random();
for (int currentGuess = 0; currentGuess < 5; currentGuess++)
{
if (random.Next(2) == 0)
guessHistory += 'H';
else
guessHistory += 'T';
}
// Analyse pattern of guesses
if (guessHistory.Substring(0, 4) == "HHTT" || guessHistory.Substring(1, 4) == "HHTT")
{
// If guess history contains HHTT then make the 6th guess = H
guessHistory += 'H';
}
return guessHistory;
}
static string headortails()
{
string guessHistory=string.Empty;
//猜正面或反面5次
随机=新随机();
对于(int currentGuess=0;currentGuess<5;currentGuess++)
{
if(随机下一个(2)=0)
猜测者