private void ShuffleUnits(INumber newNumber, IEnumerable<int> positionsToShuffle, IList<int> lockedPositions, Random random) { foreach (var positionToShuffle in positionsToShuffle) { var contextLockedPositions = new List<int>(); contextLockedPositions.AddRange(lockedPositions); contextLockedPositions.Add(positionToShuffle); var firstPositionToShuffle = positionToShuffle; var secondPositionToShuffle = this.GetRandomPosition(newNumber, contextLockedPositions, random, lockPosition: false); var firstValueToShuffle = newNumber.GetUnitValue(firstPositionToShuffle); var secondValueToShuffle = newNumber.GetUnitValue(secondPositionToShuffle); newNumber.EditUnit(firstPositionToShuffle, secondValueToShuffle); newNumber.EditUnit(secondPositionToShuffle, firstValueToShuffle); } }
private void ReplaceUnits(INumber newNumber, int unitsToReplace, IList<int> lockedPositions, IList<int> usedValues, Random random) { var exceededUnits = (unitsToReplace + lockedPositions.Count + this.unitsToInclude.Count()) - newNumber.Units.Count(); if (exceededUnits > 0) { unitsToReplace = unitsToReplace - exceededUnits; } for (var i = 0; i < unitsToReplace; i++) { var positionToReplace = this.GetRandomPosition(newNumber, lockedPositions, random); var randomNumberUnitValue = this.GetRandomNumberUnitValue(newNumber, usedValues, random); usedValues.Add(newNumber.GetUnitValue(positionToReplace)); newNumber.EditUnit(positionToReplace, randomNumberUnitValue); } }