Exemple #1
0
        private static long GetAnswer(Cup start)
        {
            var toReturn = string.Empty;
            var current  = start.Next;

            while (current != start)
            {
                toReturn += current.Value.ToString();
                current   = current.Next;
            }

            return(long.Parse(toReturn));
        }
Exemple #2
0
        private static void Print(this Dictionary <int, Cup> obj, Cup start)
        {
            var toPrint = string.Empty;
            var current = start.Next;

            do
            {
                toPrint += $"{current.Value} ";
                current  = current.Next;
            } while (current != start);

            System.Console.WriteLine(toPrint);
        }
Exemple #3
0
        private static (Cup, Cup, Dictionary <int, Cup>) ParseInput(string[] lines, int extraNumbers = 0)
        {
            var dictMap = new Dictionary <int, Cup>();
            var input   = lines[0];

            Cup firstCup = new Cup {
                Value = int.Parse(input[0].ToString())
            };

            dictMap.Add(firstCup.Value, firstCup);
            Cup currentCup = firstCup;
            Cup oneCup     = null;

            if (firstCup.Value == 1)
            {
                oneCup = firstCup;
            }

            for (var i = 1; i < input.Length; i++)
            {
                var cup = new Cup {
                    Value = int.Parse(input[i].ToString())
                };
                if (cup.Value == 1)
                {
                    oneCup = cup;
                }
                dictMap.Add(cup.Value, cup);
                currentCup.Next = cup;
                currentCup      = cup;
            }

            var nextValue = 10;

            for (var i = 0; i < extraNumbers; i++)
            {
                var cup = new Cup {
                    Value = nextValue
                };
                dictMap.Add(cup.Value, cup);
                currentCup.Next = cup;
                currentCup      = cup;
                nextValue++;
            }

            // close circle
            currentCup.Next = firstCup;

            currentCup = firstCup;
            return(currentCup, oneCup, dictMap);
        }
Exemple #4
0
        private static void Move(Cup currentCup, Dictionary <int, Cup> dictMap, int max, int moves)
        {
            int currentMove = 1;

            while (currentMove <= moves)
            {
                // System.Console.WriteLine($"-- move {currentMove} --");
                // System.Console.WriteLine($"Cups:");
                // dictMap.Print(currentCup);

                // Pickups
                var pickupStart = currentCup.Next;
                var pickupEnd   = pickupStart.Next.Next;
                // System.Console.WriteLine($"Pick up:");
                var pickups = new List <int>()
                {
                    pickupStart.Value,
                    pickupStart.Next.Value,
                    pickupStart.Next.Next.Value
                };
                // pickups.Print();

                currentCup.Next = pickupEnd.Next;

                // Destination cup
                var cupNextValue = currentCup.Value;
                do
                {
                    cupNextValue--;
                    cupNextValue = cupNextValue == 0 ? max : cupNextValue;
                }while (pickups.Contains(cupNextValue));
                var destinationCup = dictMap[cupNextValue];
                // System.Console.WriteLine($"destination: {destinationCup.Value}");

                // Place cups
                var tempNext = destinationCup.Next;
                destinationCup.Next = pickupStart;
                pickupEnd.Next      = tempNext;

                currentCup = currentCup.Next;

                // System.Console.WriteLine();
                currentMove++;
            }
            // System.Console.WriteLine($"-- final --");
            // dictMap.Print(currentCup);
        }