Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public char TypeChar(char typedChar)
- {
- Console.WriteLine("Current char: '"+typedChar+"'");
- Console.WriteLine("Rotor state: \n"+GetCurrentState());
- var sourceIndex = Array.IndexOf(alphabet, typedChar);
- StringBuilder path = new StringBuilder();
- path.Append("Path: ");
- var alphabetLength = alphabet.Length;
- // Пусть машина волшебным образом определяет положение буквы на первом диске (как в методичке)
- var currentLetterIndexInRotor1Side1InMemory = sourceIndex;
- var currentLetterIndexInRotor1Side1AsVisible = (sourceIndex - Rotor1Position + alphabetLength) % alphabetLength;
- var outLetterRotor1Side2 = Rotor1[currentLetterIndexInRotor1Side1InMemory];
- // Номер выходного пина первого ротора
- var outLetterRotor1Side2PositionInMemoryRotor1 = Array.IndexOf(alphabet, outLetterRotor1Side2);
- var outLetterRotor1Side2PositionAsVisibleRotor1 = (outLetterRotor1Side2PositionInMemoryRotor1 - Rotor1Position + alphabetLength) % alphabetLength;
- var inputLetterRotor2Side1 = alphabet[(outLetterRotor1Side2PositionAsVisibleRotor1 + Rotor2Position)%alphabetLength];
- var outPutLetterRotor2Side2 = Rotor2[(outLetterRotor1Side2PositionAsVisibleRotor1 + Rotor2Position) % alphabetLength];
- var rotor2OOutputIndex = (Array.IndexOf(alphabet, outPutLetterRotor2Side2) - Rotor2Position+alphabetLength) % alphabetLength;
- var reflectorInputLetter = alphabet[rotor2OOutputIndex];
- var reflectorOutputLetter = Reflector[rotor2OOutputIndex];
- var reflectorOutputIndex = Array.IndexOf(alphabet, reflectorOutputLetter);
- var backwardRotor2Side2InputLetter = alphabet[(reflectorOutputIndex + Rotor2Position + alphabetLength) % alphabetLength];
- var backwardRotor2Side1OutputIndex = (Array.IndexOf(Rotor2, backwardRotor2Side2InputLetter) - Rotor2Position+alphabetLength)%alphabetLength;
- var backwardRotor2Side1OutputLetter = alphabet[(backwardRotor2Side1OutputIndex+Rotor2Position)%alphabetLength];
- var backwardRotor1Side2InputLetter = alphabet[(backwardRotor2Side1OutputIndex + Rotor1Position + alphabetLength) % alphabetLength];
- var backwardRotor1Side1OutputIndex = (Array.IndexOf(Rotor1, backwardRotor1Side2InputLetter) - Rotor1Position + alphabetLength) % alphabetLength;
- var backwardRotor1Side1OutputLetter = alphabet[(backwardRotor1Side1OutputIndex + Rotor1Position) % alphabetLength];
- var transformedLetter = Rotor1[(Rotor1Position+alphabetLength)%alphabetLength];
- var transformedLetterIndexRotor1Side2 = (Array.IndexOf(alphabet, transformedLetter) - Rotor1Position + alphabetLength) % alphabetLength;
- var indexAfterDisk1 = Array.IndexOf(alphabet, Rotor1[(sourceIndex + Rotor1Position)%alphabet.Length]);
- indexAfterDisk1 = (indexAfterDisk1 + Rotor1Position)%alphabet.Length;
- path.Append("'" + typedChar + "'" + "->");
- path.Append("'" + outLetterRotor1Side2 + "'" + " | ");
- //path.Append("'" + alphabet[(sourceIndex + Rotor1Position) % alphabet.Length] + "'" + "->");
- //path.Append("'" + Rotor1[(sourceIndex + Rotor1Position) % alphabet.Length] + "'" + " | ");
- var indexAfterDisk2 = Array.IndexOf(alphabet, Rotor2[(indexAfterDisk1 + Rotor2Position) % alphabet.Length]);
- path.Append("'" + inputLetterRotor2Side1 + "'" + "->");
- path.Append("'" + outPutLetterRotor2Side2 + "'" + " | ");
- var indexAfterRefle = Array.IndexOf(alphabet, Reflector[indexAfterDisk2]);
- path.Append("'" + reflectorInputLetter + "'" + "->");
- path.Append("'" + reflectorOutputLetter + "'" + " | ");
- // проходим обратно по второму рефлектору
- path.Append("'" + backwardRotor2Side2InputLetter+ "'" + "->");
- path.Append("'" + backwardRotor2Side1OutputLetter + "'" + " | ");
- // проходим обратно по первому рефлектору
- path.Append("'" + backwardRotor1Side2InputLetter + "'" + "->");
- path.Append("'" + backwardRotor1Side1OutputLetter + "'");
- Console.WriteLine(path.ToString());
- RotateDisks();
- return backwardRotor1Side1OutputLetter;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement