Example #1
0
        public void Puzzle_23B()
        {
            var firstNumbers = new List <int> {
                6, 8, 5, 9, 7, 4, 2, 1, 3
            };
            var following = Enumerable.Range(firstNumbers.Max() + 1, 1_000_000 - firstNumbers.Count);

            firstNumbers.AddRange(following);
            var cc = new CrabCups(firstNumbers);

            for (var i = 0; i < 10_000_000; i++)
            {
                cc.Move();
            }

            Assert.Equal(157047826689, (long)cc.GetOrderFromOne().First() * cc.GetOrderFromOne().Skip(1).First());
        }
Example #2
0
        public void Puzzle_23A()
        {
            var cc = new CrabCups(new[] { 6, 8, 5, 9, 7, 4, 2, 1, 3 });

            for (var i = 0; i < 100; i++)
            {
                cc.Move();
            }

            var result = cc.GetOrderFromOne().Aggregate("", (c, n) => $"{c}{n}");

            Assert.Equal("82635947", result);
        }
Example #3
0
        public void Example_1(int[] start, int turns, int[] expectedEnd)
        {
            var cc = new CrabCups(start);

            for (var i = 0; i < turns; i++)
            {
                cc.Move();
            }

            for (var i = 0; i < expectedEnd.Length; i++)
            {
                Assert.Equal(expectedEnd[i], cc.GetOrderFromOne().Skip(i).First());
            }
        }
Example #4
0
        public void Example_2()
        {
            var firstNumbers = new List <int> {
                3, 8, 9, 1, 2, 5, 4, 6, 7
            };
            var following = Enumerable.Range(firstNumbers.Max() + 1, 1_000_000 - firstNumbers.Count);

            firstNumbers.AddRange(following);
            var cc = new CrabCups(firstNumbers);
            var sw = new Stopwatch();

            sw.Start();
            for (var i = 0; i < 10_000_000; i++)
            {
                cc.Move();
            }
            sw.Stop();
            Console.WriteLine($"{sw.ElapsedMilliseconds}ms");

            Assert.Equal(934001, cc.GetOrderFromOne().First());
            Assert.Equal(159792, cc.GetOrderFromOne().Skip(1).First());

            Assert.Equal(149245887792, (long)cc.GetOrderFromOne().First() * cc.GetOrderFromOne().Skip(1).First());
        }