Ejemplo n.º 1
0
        public void TestTwoVectorsAndTriangleThatShouldNotTrigger()
        {
            int val = 5;

            Int64[] arr            = new Int64[val + 1];
            var     z              = new CalculationGrid(MagicPurse.GenerateTestCoin(new[] { 3, 2, 1 }.ToList()).AllCombinations());
            var     nocombinations = z.CalculateTotalCoins(arr, val);

            Assert.IsTrue(nocombinations == 4);
            Assert.IsTrue(arr[5] == 1);
            Assert.IsTrue(arr[4] == 1);
            Assert.IsTrue(arr[3] == 2);
            Assert.IsTrue(arr[2] == 0); // one combo with 2
            Assert.IsTrue(arr[1] == 0); // one combo with 1
        }
Ejemplo n.º 2
0
        public void Test5()
        {
            int val = 5;

            Int64[] arr            = new Int64[val + 1];
            var     z              = new CalculationGrid(MagicPurse.GenerateTestCoin(new[] { 2, 1 }.ToList()).AllCombinations());
            var     nocombinations = z.CalculateTotalCoins(arr, val);

            Assert.IsTrue(nocombinations == 3);
            Assert.IsTrue(arr[5] == 1);
            Assert.IsTrue(arr[4] == 1);
            Assert.IsTrue(arr[3] == 1);
            Assert.IsTrue(arr[2] == 0); // one combo with 2
            Assert.IsTrue(arr[1] == 0); // one combo with 1
        }
Ejemplo n.º 3
0
        public static (IEnumerable <Int64> recursive, IEnumerable <Int64> uneven, IEnumerable <Int64> even) GetResults(
            IEnumerable <Int32> arr, int numberToAdd)
        {
            var targetValue = arr.Sum() + numberToAdd;

            Console.WriteLine("target value is " + targetValue);

            var coin = MagicPurse.GenerateTestCoin(arr.ToList());

            var s = new Stopwatch();

            s.Start();

            var coinBuffer0 = new Int64[targetValue];

            CoinsByRecursion.TotalCoinsForEachCombinationForValue(coinBuffer0, coin, targetValue);

            s.Stop();

            Console.WriteLine($"Elapsed ms - {s.ElapsedMilliseconds}");

            s = new Stopwatch();

            s.Start();

            var coinBuffer1 = GenerateUneven.Generate(arr.ToList(), targetValue);

            s.Stop();

            Console.WriteLine(s.ElapsedMilliseconds);


            s = new Stopwatch();

            s.Start();

            var coinBuffer2 = GenerateEven.Generate(coin, targetValue);

            s.Stop();

            Console.WriteLine(s.ElapsedMilliseconds);

            return(coinBuffer0, coinBuffer1, coinBuffer2);
        }
Ejemplo n.º 4
0
        public void Test7()
        {
            int val = 7;

            Int64[] arr      = new Int64[val + 1];
            bool    comboHit = false;
            var     z        = new CalculationGrid(MagicPurse.GenerateTestCoin(new[] { 4, 2, 1 }.ToList()).AllCombinations(),
                                                   (string comboKey, int value) => comboKey == "421", (state =>
            {
                if (state.node.ComboKey == "421")
                {
                    Assert(() => state.CoinsAndCombos.Count() == 1);
                    Assert(() => state.CoinsAndCombos.Contains((3, 1)));
                    comboHit = true;
                }
            }));

            z.CalculateTotalCoins(arr, val);
            Assert(() => comboHit);
        }
Ejemplo n.º 5
0
        public void Test13_EvenRoot()
        {
            int val = 14;

            Int64[] arr       = new Int64[val + 1];
            bool    comboHit1 = false;
            var     z         = new CalculationGrid(MagicPurse.GenerateTestCoin(new[] { 8, 4, 2 }.ToList()).AllCombinations(),
                                                    (string comboKey, int value) => comboKey == "842", (state =>
            {
                if (state.node.ComboKey == "842")
                {
                    Assert.IsTrue(state.CoinsAndCombos.Count() == 1);
                    Assert.IsTrue(state.CoinsAndCombos.Contains((3, 1)));
                    comboHit1 = true;
                }
            }));

            z.CalculateTotalCoins(arr, val);
            Assert.IsTrue(comboHit1);
        }
Ejemplo n.º 6
0
        static void Main(string[] args)
        {
            try
            {
                int num = 21;

                var s = new Stopwatch();

                s.Start();

                var oldRes = CoinCalculator2.CalculateTotalWaysToShare(num, CoinFactory.GenerateCoinStatic());

                Console.WriteLine($"Correct res = {oldRes}");

                Console.WriteLine($"Time - {s.ElapsedMilliseconds/1000}");

                s.Stop();

                s = new Stopwatch();

                s.Start();

                var coins = MagicPurse.GenerateCoinStatic();

                var calculationGrid = new CalculationGrid(coins.AllCombinations().ToArray(), num);

                Console.WriteLine("myres = " + calculationGrid.CalculateTotalCoins(num));

                s.Stop();

                Console.WriteLine($"Seconds = {s.ElapsedMilliseconds/1000}");
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }

            Console.ReadLine();
        }
Ejemplo n.º 7
0
        public void TestTriangle3With2Combo()
        {
            int val = 14;

            Int64[] arr       = new Int64[val + 1];
            bool    comboHit1 = false;
            var     z         = new CalculationGrid(MagicPurse.GenerateTestCoin(new[] { 4, 2, 1 }.ToList()).AllCombinations(),
                                                    (string comboKey, int value) => comboKey == "421", (state =>
            {
                if (state.node.ComboKey == "421")
                {
                    Assert.IsTrue(state.CoinsAndCombos.Count() == 5);
                    Assert.IsTrue(state.CoinsAndCombos.Contains((10, 1)));
                    Assert.IsTrue(state.CoinsAndCombos.Contains((9, 1)));
                    Assert.IsTrue(state.CoinsAndCombos.Contains((8, 1)));
                    Assert.IsTrue(state.CoinsAndCombos.Contains((7, 2)));
                    Assert.IsTrue(state.CoinsAndCombos.Contains((6, 1)));
                    comboHit1 = true;
                }
            }));

            z.CalculateTotalCoins(arr, val);
            Assert.IsTrue(comboHit1);
        }
Ejemplo n.º 8
0
        static void Main(string[] args)
        {
            //TestVector.TestThis();

            var z3 = new Vector <short>(new short[] { 1, 2, 3, 4, 5, 6, 7, 8, 0, 0, 0, 0, 0, 0, 0, 0 });

            var mult = new Vector <short>(22);

            var jg = Vector.Equals(z3, new Vector <short>(0));

            var z4 = Vector.ConditionalSelect(jg, new Vector <short>(0), mult);

            Console.WriteLine(z4);

            var p = new Vector <short>(67);

            TestVector.Vector();

            Console.ReadLine();

            return;


            var z1 = new Tester2();

            if (args.Length > 1)
            {
                z1.RunTests(args[1]);
            }
            else
            {
                z1.RunTests();
            }

            if (args.Length == 0 || args.Length > 2)
            {
                Console.WriteLine("Expected either r 23 (run a value) or t (run tests)");
                return;
            }
            if (args[0] == "r")
            {
                int val = Convert.ToInt32(args[1]);
                var res2 = new Int64[val];
                var arr2 = new int[] { 6, 2, 1 }.ToList();

                Console.WriteLine($"Value,{val}");

                var coins = MagicPurse.GenerateTestCoin(arr2);
                if (arr2.Count == 1)
                {
                    var g = ValuesAndMultiplesForEvenFactors.GenerateValuesAndMultiplesRecursive(coins, val)
                            .ToArray();
                    Printer.CalculateTotalCoinsForEachComboAndReturnCount(res2, val, g[0]);
                }
                if (arr2.Count == 2)
                {
                    var g = ValuesAndMultiplesForEvenFactors.GenerateValuesAndMultiplesRecursive(coins, val)
                            .ToArray();
                    Printer.CalculateTotalCoinsForEachComboAndReturnCount(res2, val, g[0], g[1]);
                }
                else if (arr2.Count == 3)
                {
                    var g = ValuesAndMultiplesForEvenFactors.GenerateValuesAndMultiplesRecursive(coins, val)
                            .ToArray();
                    Printer.CalculateTotalCoinsForEachComboAndReturnCount(res2, val, g[0], g[1], g[2]);
                }
                else if (arr2.Count == 4)
                {
                    var g = ValuesAndMultiplesForEvenFactors.GenerateValuesAndMultiplesRecursive(coins, val)
                            .ToArray();
                    Printer.CalculateTotalCoinsForEachComboAndReturnCount(res2, val, g[0], g[1], g[2], g[3]);
                }
                else if (arr2.Count == 5)
                {
                    var g = ValuesAndMultiplesForEvenFactors.GenerateValuesAndMultiplesRecursive(coins, val)
                            .ToArray();
                    Printer.CalculateTotalCoinsForEachComboAndReturnCount(res2, val, g[0], g[1], g[2], g[3], g[4]);
                }
            }
            else if (args[0] == "t")
            {
                var z = new Tester();
                if (args.Length > 1)
                {
                    z.RunTests(args[1]);
                }
                else
                {
                    z.RunTests();
                }
            }


            return;


            bool printResults = false;

            var arr = new[] { 64, 32, 16, 8, 4, 2, 1 };

            Printer.Print(arr.Select(x => Convert.ToInt64(x)), "Initial array");

            var res = CompareThree.GetResults(arr, 234);



            Console.WriteLine("checking equals - Recursive vs. Uneven");

            Validator.CheckEquals(res.recursive, res.uneven);

            Console.WriteLine("checking equals - Uneven versus Even");

            Validator.CheckEquals(res.uneven, res.even);

            Console.WriteLine("checking equals - Recursive versus Even");

            Validator.CheckEquals(res.recursive, res.even);

            Console.WriteLine("finished");

            if (printResults)
            {
                Printer.Print(res.recursive, "Recursive");
                Printer.Print(res.uneven, "Uneven");
                Printer.Print(res.even, "Even");
            }
        }