Ejemplo n.º 1
0
        public void Test17()
        {
            int val = 15;

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

                    comboHit1 = true;
                }

                if (state.node.ComboKey == "841")
                {
                    Assert(() => state.CoinsAndCombos.Count() == 1);
                    Assert(() => state.CoinsAndCombos.Contains((5, 1)));
                    comboHit2 = true;
                }
            }));

            z.CalculateTotalCoins(arr, val);
            Assert(() => comboHit1 && comboHit2);
        }
Ejemplo n.º 2
0
        public void Test12()
        {
            int val = 17;

            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() == 8);
                    Assert.IsTrue(state.CoinsAndCombos.Contains((13, 1)));
                    Assert.IsTrue(state.CoinsAndCombos.Contains((12, 1)));
                    Assert.IsTrue(state.CoinsAndCombos.Contains((11, 1)));
                    Assert.IsTrue(state.CoinsAndCombos.Contains((10, 2)));
                    Assert.IsTrue(state.CoinsAndCombos.Contains((9, 2)));
                    Assert.IsTrue(state.CoinsAndCombos.Contains((8, 2)));
                    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.º 3
0
        /*Value,28
         * 8,4,2,TotalCoins
         * 1,1,8,10
         * 1,2,6,9
         * 1,3,4,8
         * 1,4,2,7
         * 2,1,4,7
         * 2,2,2,6
         */
        public void Test15()
        {
            int val = 28;

            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(() => state.CoinsAndCombos.Count() == 5);
                    Assert(() => state.CoinsAndCombos.Contains((10, 1)));
                    Assert(() => state.CoinsAndCombos.Contains((9, 1)));
                    Assert(() => state.CoinsAndCombos.Contains((8, 1)));
                    Assert(() => state.CoinsAndCombos.Contains((7, 2)));
                    Assert(() => state.CoinsAndCombos.Contains((6, 1)));

                    comboHit1 = true;
                }
            }));

            z.CalculateTotalCoins(arr, val);
            Assert(() => comboHit1);
        }
Ejemplo n.º 4
0
        public void TestTriangle3With1ComboIncrement1()
        {
            int val = 8;

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

                if (state.node.ComboKey == "21")
                {
                    Assert.IsTrue(state.CoinsAndCombos.Count() == 3);
                    Assert.IsTrue(state.CoinsAndCombos.Contains((7, 1)));
                    Assert.IsTrue(state.CoinsAndCombos.Contains((6, 1)));
                    Assert.IsTrue(state.CoinsAndCombos.Contains((5, 1)));

                    comboHit2 = true;
                }
            }));

            z.CalculateTotalCoins(arr, val);
            Assert.IsTrue(comboHit1 && comboHit2);
        }
Ejemplo n.º 5
0
        public void Test2()
        {
            int val = 2;

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

            Assert(() => nocombinations == 2);
            Assert(() => arr[2] == 1); // one combo with 2
            Assert(() => arr[1] == 1); // one combo with 1
        }
Ejemplo n.º 6
0
        public void Test4()
        {
            int val = 4;

            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[4] == 1);
            Assert.IsTrue(arr[3] == 1);
            Assert.IsTrue(arr[2] == 1); // one combo with 2
            Assert.IsTrue(arr[1] == 0); // one combo with 1
        }
Ejemplo n.º 7
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.º 8
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.º 9
0
        public void TestTriangleWith1ComboMatching()
        {
            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.IsTrue(state.CoinsAndCombos.Count() == 1);
                    Assert.IsTrue(state.CoinsAndCombos.Contains((3, 1)));
                    comboHit = true;
                }
            }));

            z.CalculateTotalCoins(arr, val);
            Assert.IsTrue(comboHit);
        }
Ejemplo n.º 10
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");
            }
        }