gpt4 book ai didi

c# - 在整场比赛中获得两队最大领先优势

转载 作者:行者123 更新时间:2023-12-03 03:11:30 26 4
gpt4 key购买 nike

我有一个涉及 2 个团队的游戏Game 有一个 ScoreEvents 列表。每个得分事件得分的球队得 1 分。我需要知道每支球队的最大领先分数是多少(如果他们从未领先,则为 0)。 ScoreEvents 列表按 TimeSinceStart 排序。

public class ScoreEvent
{
public int TeamId { get; set; }
public TimeSpan TimeSinceStart { get; set; }
}

public void GetMaxScoreLead()
{
var ScoreEvents = new List<ScoreEvent>
{
new ScoreEvent { TeamId = 0, TimeSinceStart = new TimeSpan(100)},
new ScoreEvent { TeamId = 0, TimeSinceStart = new TimeSpan(200)},
new ScoreEvent { TeamId = 0, TimeSinceStart = new TimeSpan(300)},

//Score at 300 ticks is 3-0 to TeamdId = 0

new ScoreEvent { TeamId = 1, TimeSinceStart = new TimeSpan(400)},
new ScoreEvent { TeamId = 1, TimeSinceStart = new TimeSpan(500)},
new ScoreEvent { TeamId = 1, TimeSinceStart = new TimeSpan(600)},
new ScoreEvent { TeamId = 1, TimeSinceStart = new TimeSpan(700)},

//Score at 700 ticks is a 3-4 to TeamId = 1

new ScoreEvent { TeamId = 0, TimeSinceStart = new TimeSpan(800)},
new ScoreEvent { TeamId = 0, TimeSinceStart = new TimeSpan(900)},
new ScoreEvent { TeamId = 0, TimeSinceStart = new TimeSpan(1000)},
new ScoreEvent { TeamId = 0, TimeSinceStart = new TimeSpan(1100)}

//Score at 1100 ticks is 7-4 to TeamId 0
};
}

因此,对于上面的示例,每个团队最大领先优势的答案是:

  1. TeamId (0) = 3 最大领先优势
  2. TeamId (1) = 1 最大领先优势

编辑:我必须的代码。我知道我需要在某个地方跟踪当前分数。

var teamZeroLargestLead = 0;
var teamOneLargestLead = 0;

var internalTeamZeroLargestLead = 0;
var internalTeamOneLargestLead = 0;

foreach (var scoreEvent in scoreEvents.OrderBy(x => x.TimeSinceStart))
{
if (scoreEvent.TeamId == 0)
{
if (internalTeamOneLargestLead > teamOneLargestLead)
{
teamOneLargestLead = internalTeamOneLargestLead;
internalTeamOneLargestLead = 0;
}

internalTeamZeroLargestLead += 1;
}
else
{
if(internalTeamZeroLargestLead > teamZeroLargestLead)
{
teamZeroLargestLead = internalTeamZeroLargestLead;
internalTeamZeroLargestLead = 0;
}

internalTeamOneLargestLead += 1;
}
}

最佳答案

我使用 foreach 循环稍微更新和简化了您的算法,现在它返回正确的结果 - teamZeroLead3teamOneLead1

var teamZeroLead = 0;
var teamOneLead = 0;
var teamZeroScore = 0;
var teamOneScore = 0;

foreach (var scoreEvent in scoreEvents.OrderBy(x => x.TimeSinceStart))
{
if (scoreEvent.TeamId == 0)
{
teamZeroScore++;
teamZeroLead = Math.Max(teamZeroLead, teamZeroScore - teamOneScore);
}
else
{
teamOneScore++;
teamOneLead = Math.Max(teamOneLead, teamOneScore - teamZeroScore);
}
}

在每次循环迭代中,您都会计算每个团队的当前得分,然后计算领先值并将其分配给结果值(如果该值大于之前计算的值)。

同样的逻辑可以使用Aggregate方法和值元组来编写,您可以选择更易读和更方便的方式

var result = scoreEvents.Aggregate((teamZeroLead: 0, teamOneLead: 0, teamZeroScore: 0, teamOneScore: 0),
(scores, scoreEvent) =>
{
if (scoreEvent.TeamId == 0)
{
scores.teamZeroScore++;
scores.teamZeroLead = Math.Max(scores.teamZeroLead, scores.teamZeroScore - scores.teamOneScore);
}
else
{
scores.teamOneScore++;
scores.teamOneLead = Math.Max(scores.teamOneLead, scores.teamOneScore - scores.teamZeroScore);
}

return scores;
});

执行后,您可以使用 result.teamZeroLeadresult.teamOneLead 获取结果值

关于c# - 在整场比赛中获得两队最大领先优势,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61878067/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com