var pattern = _patterns[_randomGenerator.Next(0, _patterns.Count)]; var name = ""; var currentRule = ""; for (int i = 0; i < pattern.Length; i += _stepSize) { var expectedPattern = ""; if (i + _stepSize > pattern.Length) expectedPattern = pattern.Substring(i, pattern.Length - i); else expectedPattern = pattern.Substring(i, _stepSize); if (i == 0) { var rulesWithCorrectPattern = DetermineRulesWithCorrectPattern(expectedPattern, _rules); if (rulesWithCorrectPattern.Count != 0) currentRule = rulesWithCorrectPattern[_randomGenerator.Next(0, rulesWithCorrectPattern.Count)]; currentRule = ""; } else { var rulesWithCorrectPattern = DetermineRulesWithCorrectPattern(expectedPattern, _rules[currentRule]); if (rulesWithCorrectPattern.Count != 0) currentRule = rulesWithCorrectPattern[_randomGenerator.Next(0, rulesWithCorrectPattern.Count)]; currentRule = ""; } if (currentRule == string.Empty) break; name += currentRule; }