public static IEnumerable <Int64> Generate(List <Int32> foo, int value, int max = 5000) { var arr = new Int64[value]; if (foo.Count() == 7) { CoinsForUnevenFactors.CalculateTotalCoinsForEachComboAndReturnCount(arr, max, value, foo[0], foo[1], foo[2], foo[3], foo[4], foo[5], foo[6]); } if (foo.Count() == 6) { CoinsForUnevenFactors.CalculateTotalCoinsForEachComboAndReturnCount(arr, max, value, foo[0], foo[1], foo[2], foo[3], foo[4], foo[5]); } if (foo.Count() == 5) { CoinsForUnevenFactors.CalculateTotalCoinsForEachComboAndReturnCount(arr, max, value, foo[0], foo[1], foo[2], foo[3], foo[4]); } if (foo.Count() == 4) { CoinsForUnevenFactors.CalculateTotalCoinsForEachComboAndReturnCount(arr, max, value, foo[0], foo[1], foo[2], foo[3]); } if (foo.Count() == 3) { CoinsForUnevenFactors.CalculateTotalCoinsForEachComboAndReturnCount(arr, max, value, foo[0], foo[1], foo[2]); } if (foo.Count() == 2) { CoinsForUnevenFactors.CalculateTotalCoinsForEachComboAndReturnCount(arr, max, value, foo[0], foo[1]); } if (foo.Count() == 1) { CoinsForUnevenFactors.CalculateTotalCoinsForEachComboAndReturnCount(arr, max, value, foo[0]); } return(arr); }
/// <summary> /// Recalculates when any of the underlying units is 'triggered' /// i.e., is a multiple of the value. /// </summary> /// <param name="source">source value to calc</param> /// <param name="newNumberOfCoins">tally for holding combo results</param> /// <returns>number of combinations found for this result</returns> /// <exception cref="Exception"></exception> public override Int64 Calculate(int source, int maximumCoins, Int64[] newNumberOfCoins) { Int64 cnt = 0; // do calc if any multiples are triggered if (units.Any(x => source % x == 0)) { if (units.Count == 7) { cnt = CoinsForUnevenFactors.CalculateTotalCoinsForEachComboAndReturnCount(newNumberOfCoins, maximumCoins, source, units[0], units[1], units[2], units[3], units[4], units[5], units[6]); } else if (units.Count == 6) { cnt = CoinsForUnevenFactors.CalculateTotalCoinsForEachComboAndReturnCount(newNumberOfCoins, maximumCoins, source, units[0], units[1], units[2], units[3], units[4], units[5]); } else if (units.Count == 5) { cnt = CoinsForUnevenFactors.CalculateTotalCoinsForEachComboAndReturnCount(newNumberOfCoins, maximumCoins, source, units[0], units[1], units[2], units[3], units[4]); } else if (units.Count == 4) { cnt = CoinsForUnevenFactors.CalculateTotalCoinsForEachComboAndReturnCount(newNumberOfCoins, maximumCoins, source, units[0], units[1], units[2], units[3]); } else if (units.Count == 3) { cnt = CoinsForUnevenFactors.CalculateTotalCoinsForEachComboAndReturnCount(newNumberOfCoins, maximumCoins, source, units[0], units[1], units[2]); } else if (units.Count == 2) { cnt = CoinsForUnevenFactors.CalculateTotalCoinsForEachComboAndReturnCount(newNumberOfCoins, maximumCoins, source, units[0], units[1]); } else if (units.Count == 1) { cnt = CoinsForUnevenFactors.CalculateTotalCoinsForEachComboAndReturnCount(newNumberOfCoins, maximumCoins, source, units[0]); } else { throw new Exception($"Unexpected number of values initialized - {units.Count} > 7"); } } return(cnt); }