public static void Run() { const int PLAYERS = 424; const int MAX_MARBLE_VALUE = 71144 * 100;// remove * for part I List <Day9Player> players = new List <Day9Player>(); int currentPlayer = 0; for (int i = 0; i < PLAYERS; i++) { players.Add(new Day9Player()); } Day9Marble currentMarble = new Day9Marble(0); currentMarble.Next = currentMarble; currentMarble.Previous = currentMarble; for (uint currentMarbleValue = 1; currentMarbleValue <= MAX_MARBLE_VALUE; currentMarbleValue++) { var player = players[currentPlayer]; var marble = new Day9Marble(currentMarbleValue); if (marble.MarbleValue % 23 == 0) { player.AddMarble(marble); var marble7 = currentMarble.GetMarble(-7); player.AddMarble(marble7); var marble8 = marble7.GetMarble(-1); var marble6 = marble7.GetMarble(1); marble8.Next = marble6; marble6.Previous = marble8; currentMarble = marble6; } else { var next1 = currentMarble.GetMarble(1); var next2 = currentMarble.GetMarble(2); marble.Next = next2; next2.Previous = marble; marble.Previous = next1; next1.Next = marble; currentMarble = marble; } currentPlayer = (currentPlayer + 1) % PLAYERS; } Console.WriteLine(players.Max(x => x.TotalScore)); }
public void AddMarble(Day9Marble marble) { marbeles.Add(marble); }