public static IEnigmaPlugboard Generate()
        {
            IReflectorSettings reflector = ReflectorSettingsGenerator.Generate();

            IList <EnigmaPlugboardPair> pairs = new List <EnigmaPlugboardPair>();
            IList <char> usedLetters          = new List <char>();

            for (int i = 0; i < reflector.CharacterSet.Count; i++)
            {
                char fromLetter = reflector.CharacterSet[i];
                char toLetter   = reflector.Substitutions[i];

                if (!usedLetters.Contains(fromLetter) &&
                    !usedLetters.Contains(toLetter))
                {
                    usedLetters.Add(fromLetter);
                    usedLetters.Add(toLetter);
                    pairs.Add(new EnigmaPlugboardPair()
                    {
                        From = fromLetter, To = toLetter
                    });
                }
            }

            return(new EnigmaPlugboard(pairs));
        }
Пример #2
0
 /// <summary>
 /// Initializes a new instance of the <see cref="Reflector"/> class.
 /// </summary>
 /// <param name="settings">The cipher's settings.</param>
 public Reflector(IReflectorSettings settings) => Settings = settings;