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); }
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); }
/*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); }
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); }
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 }
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 }
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 }
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); }
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); }
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"); } }