Ejemplo n.º 1
0
        private static void OperateRecipe(bool part2)
        {
            byte firstRecipeByte  = firstRecipe.Value;
            byte secondRecipeByte = secondRecipe.Value;
            byte newResult        = (byte)(firstRecipeByte + secondRecipeByte);

            if (newResult >= 10)
            {
                temporalQueue[0] = 1;
                temporalQueue[1] = (byte)(newResult % 10);
                howManyGet       = 2;
            }
            else
            {
                temporalQueue[0] = newResult;
                howManyGet       = 1;
            }
            var newRecipes = newResult.ToString().ToArray();

            for (byte w = 0; w < howManyGet; w++)
            {
                lstRecipes.AddLast(temporalQueue[w]);
                if (part2 == true)
                {
                    if (getLastNumber() == iterations)
                    {
                        Console.WriteLine("PART 2: " + (lstRecipes.Count - strIterations.Length));
                        breakPart2 = true;
                    }
                }
            }
            firstRecipe  = Util.GetNextCircular(firstRecipe, firstRecipeByte + 1);
            secondRecipe = Util.GetNextCircular(secondRecipe, secondRecipeByte + 1);
        }
Ejemplo n.º 2
0
        public static long Problem1(int numberOfPlayers, long marbles)
        {
            LinkedList <int> marbleCircle = new LinkedList <int>();

            marbleCircle.AddFirst(1);
            marbleCircle.AddFirst(0);

            LinkedList <Player> lstPlayers = new LinkedList <Player>();

            for (int i = 1; i < numberOfPlayers + 1; i++)
            {
                lstPlayers.AddLast(new Player(i));
            }

            var currentPlayer = lstPlayers.First.Next.Next;
            //int currentPlayer = 3;

            LinkedListNode <int> leCurrentNode = marbleCircle.Last;

            for (int currentMarble = 2; currentMarble < marbles; currentMarble++)
            {
                var marble = currentMarble;

                if (marble % 23 != 0)
                {
                    var insertPosition = Util.GetNextCircular(leCurrentNode);
                    leCurrentNode = marbleCircle.AddAfter(insertPosition, currentMarble);
                }
                else
                {
                    var player = currentPlayer;//lstPlayers.SingleOrDefault(r => r.playerID == currentPlayer);
                    player.Value.score += marble;

                    var insertPosition = Util.GetPreviousCircular(leCurrentNode, 7);
                    player.Value.score += insertPosition.Value;
                    leCurrentNode       = Util.GetNextCircular(insertPosition);
                    marbleCircle.Remove(insertPosition);
                }
                currentPlayer = Util.GetNextCircular(currentPlayer);//lstPlayers.ElementAt(GetNextCircular(lstPlayers.Count, currentPlayer - 1)).playerID;
            }

            return(lstPlayers.Max(r => r.score));
        }
Ejemplo n.º 3
0
        private static void Part1()
        {
            lstRecipes.AddFirst(7);
            lstRecipes.AddFirst(3);
            firstRecipe  = lstRecipes.First;
            secondRecipe = lstRecipes.First.Next;

            for (int i = 0; i < 10 + iterations; i++)
            {
                OperateRecipe(false);
            }

            LinkedListNode <byte> startPoint = lstRecipes.First;
            var properPoint = Util.GetNextCircular(startPoint, iterations);

            for (int i = 0; i < 10; i++)
            {
                lstResult.AddLast(properPoint.Value);
                properPoint = properPoint.Next;
            }
            Console.WriteLine("PART 1: " + string.Concat(lstResult));
        }