private bool ShouldIncrement(int currentDepth) { bool result = false; if (currentDepth >= _depth - 1) { MajorityElementMode oldMode = TargetSystem.Floors[currentDepth].MajorityElement.Mode; MajorityElementMode newMode = DecrementFloorMajorityElementMode(currentDepth); if (newMode == MajorityElementMode.ThirdChannel && oldMode == MajorityElementMode.Majority) { result = true; } } else { bool shouldIncrement = ShouldIncrement(currentDepth + 1); if (shouldIncrement == true) { MajorityElementMode oldMode = TargetSystem.Floors[currentDepth].MajorityElement.Mode; MajorityElementMode newMode = DecrementFloorMajorityElementMode(currentDepth); if (newMode == MajorityElementMode.ThirdChannel && oldMode == MajorityElementMode.Majority) { result = true; } } } return(result); }
protected MajorityElementMode DecrementFloorMajorityElementMode(int floorIndex) { MajorityElementMode majorityElementMode = TargetSystem.Floors[floorIndex].MajorityElement.Mode; TargetSystem.Floors[floorIndex].MajorityElement.Mode = ChangeMajorityMode(majorityElementMode, false); return(TargetSystem.Floors[floorIndex].MajorityElement.Mode); }
protected MajorityElementMode ChangeMajorityMode(MajorityElementMode currentValue, bool increment) { int period = Enum.GetNames(typeof(MajorityElementMode)).Length; if (increment) { return((MajorityElementMode) (((int)currentValue + 1) % period)); } else { return((MajorityElementMode) (((int)currentValue + period - 1) % period)); } }
private bool CheckFloorsConfig() { foreach (Floor floor in TargetSystem.Floors) { MajorityElementMode floorMode = floor.MajorityElement.Mode; switch (floorMode) { case MajorityElementMode.Majority: { int aliveElements = floor.Elements.Count(cc => cc.IsAlive); if (aliveElements < 2) { return(false); } break; } case MajorityElementMode.FirstChannel: { if (floor.Elements[0].IsAlive == false) { return(false); } break; } case MajorityElementMode.SecondChannel: { if (floor.Elements[1].IsAlive == false) { return(false); } break; } case MajorityElementMode.ThirdChannel: { if (floor.Elements[2].IsAlive == false) { return(false); } break; } } } return(true); }
public MajorityElement(Decimal majorityElementFailureRate) { FailureRate = majorityElementFailureRate; Mode = MajorityElementMode.Majority; IsAlive = true; }