public static bool GetIsValidNextNumber(IList <BigInteger> previousNumbers, BigInteger nextNumber) { var pairSums = CombinationsHelper.CombinationsRosettaWoRecursion(previousNumbers.ToArray(), 2) .Where(numberPair => numberPair[0] != numberPair[1]) .Select(numberPair => numberPair.Aggregate((item1, item2) => item1 + item2)); var result = pairSums.Contains(nextNumber); return(result); }
public static IList <long> GetAddressesWithMaskApplied(long decimalAddress, string mask) { var result = new List <long>(); var binaryValueBitArray = Convert.ToString(decimalAddress, 2).PadLeft(36, '0').ToCharArray(); for (int i = 0; i < 36; i++) { var maskBit = mask[i]; if ('0'.Equals(maskBit)) { continue; } binaryValueBitArray[i] = maskBit; } var numberOfFloatingBits = binaryValueBitArray.Where(b => 'X'.Equals(b)).Count(); var floatingBitCombinations = CombinationsHelper.GetAllPossibleOutcomesOfNExperiments(new char[] { '0', '1' }, numberOfFloatingBits); var floatingBitPositions = new List <int>(); for (int i = 0; i < 36; i++) { if ('X'.Equals(binaryValueBitArray[i])) { floatingBitPositions.Add(i); } } var addressBitArrays = new List <char[]>(); foreach (var floatingBitComination in floatingBitCombinations) { var currentAddressBitArray = binaryValueBitArray.ToArray(); for (int i = 0; i < numberOfFloatingBits; i++) { var floatingBitPosition = floatingBitPositions[i]; currentAddressBitArray[floatingBitPosition] = floatingBitComination[i]; } addressBitArrays.Add(currentAddressBitArray); } foreach (var addressBitArray in addressBitArrays) { var addressBinaryString = new string(addressBitArray); var address = Convert.ToInt64(addressBinaryString, 2); result.Add(address); } return(result); }
public static IList <int> GetNumbersThatSumToTarget(IList <int> numberList, int numberOfEntries, int targetSum) { var combinationsEnumerator = CombinationsHelper.CombinationsRosettaWoRecursion(numberList.ToArray(), numberOfEntries); foreach (var numberCombination in combinationsEnumerator) { var testSum = 0; foreach (var currentNumber in numberCombination) { testSum += currentNumber; if (testSum > targetSum) { break; } } if (testSum == targetSum) { return(numberCombination.ToList()); } } return(new List <int>()); }
public IActionResult Combinations([FromQuery] int[] arr) { var result = CombinationsHelper.CombinationsRosettaWoRecursion(arr, 2); return(Ok(result)); }