private IEnumerable <CoreDefinitions.IOptionalAutomaton> GetAllFullAutomataToCheckRecursively(int size, int index) { byte[] MemoryB = new byte[size], memoryHelp; int maxLength = (size - 1) * (size - 1); List <byte>[] TransitionsFromA = new List <byte> [size]; List <byte>[] helpList = new List <byte> [size]; for (byte i = 0; i < size; i++) { TransitionsFromA[i] = new List <byte>(); } foreach (var AcAutomaton in solutionMapper2.SelectAsSolved(GetAllAcAutomataToCheck(size, index))) { if (AcAutomaton.SynchronizingWordLength == null || (AcAutomaton.SynchronizingWordLength * 2) + 1 > maxLength) { Array.Copy(AcAutomaton.TransitionFunctionsB, MemoryB, AcAutomaton.TransitionFunctionsB.Length); MakingFullAutomata makingFullAutomata = new MakingFullAutomata(AcAutomaton, TransitionsFromA, helpList); foreach (var fullAutomaton in makingFullAutomata.Generate()) { yield return(fullAutomaton); } memoryHelp = AcAutomaton.TransitionFunctionsB; AcAutomaton.TransitionFunctionsB = MemoryB; MemoryB = memoryHelp; } } }
public IEnumerable <CoreDefinitions.ISolvedOptionalAutomaton> GetAllSolved(int size, int index) => solutionMapper1.SelectAsSolved(GetAllFullAutomataToCheckRecursively(size, index));