@@ -25,6 +25,7 @@ def create_rotors(self, keys: Union[tuple, list], ):
2525
2626 for ring in range (len (keys [0 ])):
2727 self .create_rotor (ring , keys [0 ][ring ])
28+ self .create_reflector (keys [1 ])
2829
2930 def create_rotor (self , ring , key ):
3031 self .randomish .set_seed (key )
@@ -44,15 +45,13 @@ def create_reflector(self, key):
4445 temp_reflector = dict ()
4546 temp_char = list (self .ring_chars )
4647 while len (temp_char ):
47- a = self .randomish .random_int (len (temp_char ))
48- b = self . randomish . random_int ( len ( temp_char ) )
48+ rand = ( self .randomish .random_int (len (temp_char )), self . randomish . random_int ( len ( temp_char ) ))
49+ a , b = min ( rand ), max ( rand )
4950 temp_reflector [temp_char [a ]] = temp_char [b ]
5051 temp_reflector [temp_char [b ]] = temp_char [a ]
5152 del temp_char [a ]
52- try :
53- del temp_char [b ]
54- except IndexError :
55- pass
53+ if a != b :
54+ del temp_char [b - 1 ]
5655 self .reflector = temp_reflector
5756
5857 return
@@ -76,16 +75,15 @@ def rotor_start(self, keys: Union[list, tuple]):
7675 self .rotate (rotor , quantity = keys [rotor ])
7776 self .add_rotation (rotor , keys [rotor ])
7877
79- def rotor_f (self , char , ring ): # PROBLEM IS HERE
80- loc = self .ring_chars .find (char )
81- if loc == - 1 :
82- return
78+ def rotor_f (self , char , ring ):
79+ if char in self .ring_chars :
80+ return self .rotors [ring ][self .ring_chars .index (char )]
8381 else :
84- return self . rotors [ ring ][ loc ]
82+ return
8583
86- def rotor_b (self , char , ring ): # PROBLEM IS HERE
84+ def rotor_b (self , char , ring ):
8785 if char in self .ring_chars :
88- return self .rotors [ring ][ self . ring_chars .index (char )]
86+ return self .ring_chars [ self . rotors [ring ].index (char )]
8987 else :
9088 return
9189
@@ -145,7 +143,7 @@ def crypt(self, text, enc=True):
145143if __name__ == '__main__' :
146144 yenigma = Yenigma ()
147145 yenigma .create_rotors (((1 , 2 , 3 ), 1 ))
148- print (yenigma .crypt ("pleasework " ))
146+ print (yenigma .crypt ("qefqfrshmu " ))
149147 while True :
150148 try :
151149 print (eval (input ()))
0 commit comments