private string Solve(int lastMarble) { var marbles = new MarbleList(); marbles.AddFirst(0); var currentNode = marbles.First; var playerScore = new long[PlayerCount]; int currentPlayer = 0; for (int marble = 1; marble <= lastMarble; marble++) { if (marble % 23 == 0) { playerScore[currentPlayer] += marble; currentNode = marbles.Previous(currentNode, 7); playerScore[currentPlayer] += currentNode.Value; currentNode = currentNode.Next; marbles.Remove(currentNode.Previous); } else { marbles.AddAfter(marbles.Next(currentNode, 1), marble); currentNode = marbles.Next(currentNode, 2); } currentPlayer = (currentPlayer + 1) % PlayerCount; } return(playerScore.Max().ToString()); }