示例#1
0
        public void TestSculptureRotation()
        {
            KineticSculpture sculpture = new KineticSculpture();

            sculpture.InitialiseDisc(1, 5, 4);
            sculpture.InitialiseDisc(2, 2, 1);
            sculpture.Rotate();

            Assert.AreEqual(0, sculpture.Discs[0].CurrentPosition);
            Assert.AreEqual(0, sculpture.Discs[1].CurrentPosition);
        }
示例#2
0
        private static void InitSculpture(string input, KineticSculpture sculpture)
        {
            int discCounter = 0;

            foreach (string instruction in input.Split(Environment.NewLine.ToCharArray(),
                                                       StringSplitOptions.RemoveEmptyEntries))
            {
                discCounter++;
                // e.g. "Disc #1 has 5 positions; at time=0, it is at position 4"
                string[] instructionPortions = instruction.Split(' ');
                int      positions           = Convert.ToInt32(instructionPortions[3]);
                int      currentPosition     = Convert.ToInt32(instructionPortions[11]);
                sculpture.InitialiseDisc(discCounter, positions, currentPosition);
            }
        }
示例#3
0
        public void TestSculptureSolution()
        {
            KineticSculpture sculpture = new KineticSculpture();

            sculpture.InitialiseDisc(1, 5, 4);
            sculpture.InitialiseDisc(2, 2, 1);

            for (int i = 0; i < 5; i++)
            {
                if (sculpture.CurrentPositionSolvesPuzzle())
                {
                    throw new ApplicationException("Should not solve before 5");
                }
                sculpture.Rotate();
            }

            Assert.IsTrue(sculpture.CurrentPositionSolvesPuzzle());
        }
示例#4
0
        public int SolvePuzzle(string input)
        {
            KineticSculpture sculpture = new KineticSculpture();

            InitSculpture(input, sculpture);

            int time = 0;

            while (true)
            {
                if (sculpture.CurrentPositionSolvesPuzzle())
                {
                    return(time);
                }

                time++;
                sculpture.Rotate();
            }
        }
示例#5
0
        public int SolvePuzzlePart2(string input)
        {
            KineticSculpture sculpture = new KineticSculpture();

            InitSculpture(input, sculpture);
            sculpture.InitialiseDisc(sculpture.Discs.Count + 1, 11, 0);

            int time = 0;

            while (true)
            {
                if (sculpture.CurrentPositionSolvesPuzzle())
                {
                    return(time);
                }

                time++;
                sculpture.Rotate();
            }
        }