Exemple #1
0
        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());
        }