public static StatesSequence GetStatesSequence(string startState, List <int> summators, string mode, int number) // получаем последовательность состояний { StatesSequence statesSequence = new StatesSequence(); statesSequence.name = String.Format("Последовательность {0}", number); statesSequence.InitilizeSequencesBySummator(summators.Count); statesSequence.summators.AddRange(summators); List <string> states = new List <string>(); string currentState = startState; string stateIsExist = null; while (stateIsExist == null) { states.Add(currentState); foreach (var summator in summators) { statesSequence.sequences[summators.IndexOf(summator)].Append(GetStateBySummator(currentState, summator)); } usedStatesCount++; currentState = GetNextState(currentState, summators, mode); stateIsExist = states.FirstOrDefault(state => state.Equals(currentState)); } statesSequence.states.AddRange(states); return(statesSequence); }
public static List <StatesSequence> Generate(string finalPolinom, string mode) { List <StatesSequence> sequences = new List <StatesSequence>(); List <int> summators = GetSummatorsFromPolinom(finalPolinom); List <string> allStates = GetAllStates(GetMask(finalPolinom.Length - 1)); List <string> usedStates = new List <string>(); allStatesCount = (ulong)allStates.Count; string startState = GetMaskedSequence("0", GetMask(finalPolinom.Length - 1), 0); int i = 1; while (startState != null) // пока есть состояния, которые не были выведены ни в одной из последовательностей { StatesSequence currentSequence = new StatesSequence(); currentSequence = GetStatesSequence(startState, summators, mode, i); if (currentSequence.states.Count > 1) { sequences.Add(currentSequence); currentSequence.PrintSequence(); i++; // считаем последовательности состояний } else { forbiddenStates.AddRange(currentSequence.states); } usedStates.AddRange(currentSequence.states); // помечаем использованные состояния usedStates = usedStates.OrderBy(q => q).ToList(); // упорядочиваем их foreach (var state in usedStates) { allStates.RemoveAll(x => x.Equals(state)); // из списка всех состояний удаляем использованные } startState = allStates.FirstOrDefault(); // получаем первое состояние в оставшихся неиспользованных } return(sequences); }