Advertisement
Julia32

Роторные машины помогите написать комментарии

Jan 28th, 2015
188
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.54 KB | None | 0 0
  1.    public char TypeChar(char typedChar)
  2.         {
  3.             Console.WriteLine("Current char: '"+typedChar+"'");
  4.             Console.WriteLine("Rotor state: \n"+GetCurrentState());
  5.  
  6.             var sourceIndex = Array.IndexOf(alphabet, typedChar);
  7.             StringBuilder path = new StringBuilder();
  8.             path.Append("Path: ");
  9.             var alphabetLength = alphabet.Length;
  10.             // Пусть машина волшебным образом определяет положение буквы на первом диске (как в методичке)
  11.             var currentLetterIndexInRotor1Side1InMemory = sourceIndex;
  12.             var currentLetterIndexInRotor1Side1AsVisible = (sourceIndex - Rotor1Position + alphabetLength) % alphabetLength;
  13.             var outLetterRotor1Side2 = Rotor1[currentLetterIndexInRotor1Side1InMemory];
  14.             // Номер выходного пина первого ротора
  15.             var outLetterRotor1Side2PositionInMemoryRotor1 = Array.IndexOf(alphabet, outLetterRotor1Side2);
  16.             var outLetterRotor1Side2PositionAsVisibleRotor1 = (outLetterRotor1Side2PositionInMemoryRotor1 - Rotor1Position + alphabetLength) % alphabetLength;
  17.  
  18.             var inputLetterRotor2Side1 = alphabet[(outLetterRotor1Side2PositionAsVisibleRotor1 + Rotor2Position)%alphabetLength];
  19.             var outPutLetterRotor2Side2 = Rotor2[(outLetterRotor1Side2PositionAsVisibleRotor1 + Rotor2Position) % alphabetLength];
  20.             var rotor2OOutputIndex = (Array.IndexOf(alphabet, outPutLetterRotor2Side2) - Rotor2Position+alphabetLength) % alphabetLength;
  21.  
  22.             var reflectorInputLetter = alphabet[rotor2OOutputIndex];
  23.             var reflectorOutputLetter = Reflector[rotor2OOutputIndex];
  24.             var reflectorOutputIndex = Array.IndexOf(alphabet, reflectorOutputLetter);
  25.  
  26.             var backwardRotor2Side2InputLetter = alphabet[(reflectorOutputIndex + Rotor2Position + alphabetLength) % alphabetLength];
  27.             var backwardRotor2Side1OutputIndex = (Array.IndexOf(Rotor2, backwardRotor2Side2InputLetter) - Rotor2Position+alphabetLength)%alphabetLength;
  28.             var backwardRotor2Side1OutputLetter = alphabet[(backwardRotor2Side1OutputIndex+Rotor2Position)%alphabetLength];
  29.  
  30.             var backwardRotor1Side2InputLetter = alphabet[(backwardRotor2Side1OutputIndex + Rotor1Position + alphabetLength) % alphabetLength];
  31.             var backwardRotor1Side1OutputIndex = (Array.IndexOf(Rotor1, backwardRotor1Side2InputLetter) - Rotor1Position + alphabetLength) % alphabetLength;
  32.             var backwardRotor1Side1OutputLetter = alphabet[(backwardRotor1Side1OutputIndex + Rotor1Position) % alphabetLength];
  33.  
  34.  
  35.             var transformedLetter = Rotor1[(Rotor1Position+alphabetLength)%alphabetLength];
  36.             var transformedLetterIndexRotor1Side2 = (Array.IndexOf(alphabet, transformedLetter) - Rotor1Position + alphabetLength) % alphabetLength;
  37.  
  38.  
  39.             var indexAfterDisk1 = Array.IndexOf(alphabet, Rotor1[(sourceIndex + Rotor1Position)%alphabet.Length]);
  40.             indexAfterDisk1 = (indexAfterDisk1 + Rotor1Position)%alphabet.Length;
  41.             path.Append("'" + typedChar + "'" + "->");
  42.             path.Append("'" + outLetterRotor1Side2 + "'" + "  |  ");
  43.             //path.Append("'" + alphabet[(sourceIndex + Rotor1Position) % alphabet.Length] + "'" + "->");
  44.             //path.Append("'" + Rotor1[(sourceIndex + Rotor1Position) % alphabet.Length] + "'" + "  |  ");
  45.  
  46.             var indexAfterDisk2 = Array.IndexOf(alphabet, Rotor2[(indexAfterDisk1 + Rotor2Position) % alphabet.Length]);
  47.             path.Append("'" + inputLetterRotor2Side1 + "'" + "->");
  48.             path.Append("'" + outPutLetterRotor2Side2 + "'" + "  |  ");
  49.  
  50.             var indexAfterRefle = Array.IndexOf(alphabet, Reflector[indexAfterDisk2]);
  51.             path.Append("'" + reflectorInputLetter + "'" + "->");
  52.             path.Append("'" + reflectorOutputLetter + "'" + "  |  ");
  53.  
  54.             // проходим обратно по второму рефлектору
  55.             path.Append("'" + backwardRotor2Side2InputLetter+ "'" + "->");
  56.             path.Append("'" + backwardRotor2Side1OutputLetter + "'" + "  |  ");
  57.  
  58.             // проходим обратно по первому рефлектору
  59.             path.Append("'" + backwardRotor1Side2InputLetter + "'" + "->");
  60.             path.Append("'" + backwardRotor1Side1OutputLetter + "'");
  61.                        
  62.             Console.WriteLine(path.ToString());
  63.  
  64.             RotateDisks();
  65.  
  66.             return backwardRotor1Side1OutputLetter;
  67.         }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement