Exemplo n.º 1
0
        public NineNode(long value, NineNode ccw, NineNode cw)
        {
            Value = value;
            CCW   = ccw ?? this;
            CW    = cw ?? this;

            CW.CCW = this;
            CCW.CW = this;
        }
Exemplo n.º 2
0
        public void PartOne(int elfCount, long marbleMaxIdx)
        {
            var         solution  = String.Empty;
            NineNode    iter      = new NineNode(0, null, null);
            List <long> players   = Enumerable.Range(0, elfCount).Select(x => (long)0).ToList();
            var         playerIdx = 0;

            //16458525
            for (var i = 1; i <= marbleMaxIdx; i++)
            {
                if ((i % 23) == 0)
                {
                    for (var j = 0; j < 7; j++)
                    {
                        iter = iter.CCW;
                    }

                    var toRemove = iter;
                    iter = toRemove.CW;

                    iter.CCW        = toRemove.CCW;
                    toRemove.CCW.CW = iter;

                    players[playerIdx] += toRemove.Value + i;
                }
                else
                {
                    var one = iter.CW;
                    var two = one.CW;

                    iter = new NineNode(i, one, two);
                }
                playerIdx += 1;
                if (playerIdx == elfCount)
                {
                    playerIdx = 0;
                }
            }
            solution = players.Max().ToString();
            //System.Windows.Forms.Clipboard.SetText(solution.ToString());
            Console.WriteLine("Day Nine: " + solution);
        }