C# 在字符串变量中查找模式

C# 在字符串变量中查找模式,c#,string,pattern-matching,C#,String,Pattern Matching,我需要创建一个head或tails项目,其中计算机将随机猜测多达5次,但在第六次时,它将以字符串形式查看playerGuessHistory变量设置,以查看是否可以找到4个entires模式的匹配项。如果找到一个模式,计算机将猜测模式后的下一个字符 例如,给定序列HHTTH,模式为HHTT,因此计算机将猜测第六圈的H。我唯一的问题是,我很难设置这个项目,这样它就可以查看PlayerGuessHistory,找到模式并猜测历史中的下一个角色。有什么建议吗?创建一个列表并将历史记录加入其中,这样列表

我需要创建一个head或tails项目,其中计算机将随机猜测多达5次,但在第六次时,它将以字符串形式查看playerGuessHistory变量设置,以查看是否可以找到4个entires模式的匹配项。如果找到一个模式,计算机将猜测模式后的下一个字符

例如,给定序列
HHTTH
,模式为
HHTT
,因此计算机将猜测第六圈的
H
。我唯一的问题是,我很难设置这个项目,这样它就可以查看PlayerGuessHistory,找到模式并猜测历史中的下一个角色。有什么建议吗?

创建一个
列表
并将历史记录加入其中,这样列表中的每个项目都是一个由4个字符组成的字符串(如文本中所示)。然后,当计算机猜测时,从以(
myList.StartsWith
-method)字符串开头的列表中选择项目(应该有多个),然后应将H作为下一个字符的次数相加,以及T是下一个字符的次数-计算每个字符的概率,让计算机选择概率最高的一个

这有意义吗?

创建一个
列表
并将历史记录放入其中,这样列表中的每个项目都是一个由4个字符组成的字符串(如文本中所示)。然后,当计算机猜测时,从以(
myList.StartsWith
-method)字符串开头的列表中选择项目(应该有多个),然后应将H作为下一个字符的次数相加,以及T是下一个字符的次数-计算每个字符的概率,让计算机选择概率最高的一个


这有意义吗?

首先,如果正面和反面真的是随机的,就像掷硬币的结果一样,这项任务是没有意义的。无论历史上是否有任何可感知的模式,计算机总是以1/2的概率正确地进行下一次投掷。(见附件。)

现在,如果正面和反面不是真正随机的(例如,他们是由一个人以他认为是随机的方式调用正面或反面创建的),那么我们可以让计算机的成功报价高于1/2

我会尝试以下方法:首先,检查历史记录中的频率

  • 头后面跟着头
  • 头后面跟着尾巴
用这些数字来猜测转移概率H->H和H->T,对尾部做同样的操作,然后根据最后一个结果来猜测下一个结果,选择看起来更可能的结果

在序列“hhh”中,你会发现 -H->H:2/3 -H->T:1/3 -T->H:1/1 由于上一次掷骰是正面掷骰,计算机应选择正面作为下一次掷骰的猜测


现在,你可以通过计算“HH->T”等转换来尝试将历史的较长部分考虑在内,并尝试提高成功率。

首先,如果正面和反面都是随机的,就像掷硬币的结果一样,这项任务是没有意义的。无论历史上是否有任何可感知的模式,计算机总是以1/2的概率正确地进行下一次投掷。(见附件。)

现在,如果正面和反面不是真正随机的(例如,他们是由一个人以他认为是随机的方式调用正面或反面创建的),那么我们可以让计算机的成功报价高于1/2

我会尝试以下方法:首先,检查历史记录中的频率

  • 头后面跟着头
  • 头后面跟着尾巴
用这些数字来猜测转移概率H->H和H->T,对尾部做同样的操作,然后根据最后一个结果来猜测下一个结果,选择看起来更可能的结果

在序列“hhh”中,你会发现 -H->H:2/3 -H->T:1/3 -T->H:1/1 由于上一次掷骰是正面掷骰,计算机应选择正面作为下一次掷骰的猜测


现在,您可以通过计算转换“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)
猜测者