Задание: написать метод, возвращающий запись из массива записей по передаваемому параметру
Задание: "В примере кода ниже генерируется список фиксаций состояния счета игры в течение матча. Разработайте функцию Game.getScore(offset), которая вернет счет на момент offset."
{
class App
{
static void Main(string[] args)
{
Game.task1();
}
public struct Score
{
public int home;
public int away;
public Score(int home, int away)
{
this.home = home;
this.away = away;
}
}
public struct GameStamp
{
public int offset;
public Score score;
public GameStamp(int offset, int home, int away)
{
this.offset = offset;
this.score = new Score(home, away);
}
}
public class Game
{
const int TIMESTAMPS_COUNT = 50000;
const double PROBABILITY_SCORE_CHANGED = 0.0001;
const double PROBABILITY_HOME_SCORE = 0.45;
const int OFFSET_MAX_STEP = 3;
GameStamp[] gameStamps;
public Game()
{
this.gameStamps = new GameStamp[] { };
}
public Game(GameStamp[] gameStamps)
{
this.gameStamps = gameStamps;
}
GameStamp generateGameStamp(GameStamp previousValue)
{
Random rand = new Random();
bool scoreChanged = rand.NextDouble() > 1 - PROBABILITY_SCORE_CHANGED;
int homeScoreChange = scoreChanged && rand.NextDouble() > 1 - PROBABILITY_HOME_SCORE ? 1 : 0;
int awayScoreChange = scoreChanged && homeScoreChange == 0 ? 1 : 0;
int offsetChange = (int)(Math.Floor(rand.NextDouble() * OFFSET_MAX_STEP)) + 1;
return new GameStamp(
previousValue.offset + offsetChange,
previousValue.score.home + homeScoreChange,
previousValue.score.away + awayScoreChange
);
}
static Game generateGame()
{
Game game = new Game();
game.gameStamps = new GameStamp[TIMESTAMPS_COUNT];
GameStamp currentStamp = new GameStamp(0, 0, 0);
for (int i = 0; i < TIMESTAMPS_COUNT; i++)
{
game.gameStamps[i] = currentStamp;
currentStamp = game.generateGameStamp(currentStamp);
}
return game;
}
public static void task1()
{
Game game = generateGame();
game.printGameStamps();
}
void printGameStamps()
{
foreach (GameStamp stamp in this.gameStamps)
{
Console.WriteLine($"{stamp.offset}: {stamp.score.home}-{stamp.score.away}");
}
}
public Score getScore(int offset)
{
GameStamp[] stamps = this.gameStamps;
Score score = new();
var gameStamp = stamps.Last(p => p.offset == offset);
score = gameStamp.score;
Console.WriteLine($"{offset} - {score.home} -{score.away}");
return score; **// Вроде бы так, Но как тогда обработать исключение, потому что может не найтись GameStamp с параметром offset, он гененируется случайно**
}
}
}
Ответы (3 шт):
Автор решения: CrazyElf
→ Ссылка
- пройти циклом по
gameStampsи - найти последний
gameStamp, у которогоoffset<=offsetиз параметра функции - вернуть
scoreиз этого найденногоgameStamp
Автор решения: Nik 25
→ Ссылка
public Score getScore(int offset)
{
GameStamp[] stamps = this.gameStamps;
Score score = new();
try
{
var gameStamp = stamps.First(p => p.offset == offset);
score = gameStamp.score;
Console.WriteLine($"Offset: {offset} - Home: {score.home} - Away: {score.away}");
}
catch
{
Console.WriteLine("Не найдено соответствующего значения");
}
return score;
} // Вроде так получается
Автор решения: x0r
→ Ссылка
public Score getScore(int offset)
{
foreach (GameStamp stamp in this.gameStamps)
if (stamp.offset == offset)
return new Score(stamp.score.home, stamp.score.away);
return new Score(0, 0);
}