


'''simple docstring'''







from __future__ import annotations

from string import ascii_letters






def    lowerCAmelCase__ (       lowerCamelCase  :    str						,lowerCamelCase  :    int						,lowerCamelCase  :    str | None = None     ):
       _A  :			Optional[Any]											=      alphabet or ascii_letters

       # The final result string
       _A  :			Tuple											=      ''

       for character in input_string:
              if character not in alpha:
                     # Append without encryption if character is not in the alphabet
                     result += character
              else:
                     # Get the index of the new key and make sure it isn't too large
                     _A  :			Optional[int]											=      (alpha.index(lowerCamelCase     ) + key) % len(lowerCamelCase     )

                     # Append the encoded character to the alphabet
                     result += alpha[new_key]

       return result






def    lowerCAmelCase__ (       lowerCamelCase  :    str						,lowerCamelCase  :    int						,lowerCamelCase  :    str | None = None     ):
       key *= -1

       return encrypt(lowerCamelCase						,lowerCamelCase						,lowerCamelCase     )






def    lowerCAmelCase__ (       lowerCamelCase  :    str						,lowerCamelCase  :    str | None = None     ):
       _A  :			Union[str, Any]											=      alphabet or ascii_letters

       # To store data on all the combinations
       _A  :			Dict											=      {}

       # Cycle through each combination
       for key in range(1						,len(lowerCamelCase     ) + 1     ):
              # Decrypt the message and store the result in the data
              _A  :			Any											=      decrypt(lowerCamelCase						,lowerCamelCase						,lowerCamelCase     )

       return brute_force_data


if __name__ == "__main__":
      while True:
            print(f"""\n{"-" * 10}\n Menu\n{"-" * 10}""")
            print(*['''1.Encrypt''', '''2.Decrypt''', '''3.BruteForce''', '''4.Quit'''], sep='''\n''')

            # get user input
            A   :  Any       		=				input('''\nWhat would you like to do?: ''').strip() or '''4'''

            # run functions based on what the user chose
            if choice not in ("1", "2", "3", "4"):
                  print('''Invalid choice, please enter a valid choice''')
            elif choice == "1":
                  A   :  Union[str, Any]       		=				input('''Please enter the string to be encrypted: ''')
                  A   :  List[Any]       		=				int(input('''Please enter off-set: ''').strip())

                  print(encrypt(input_string, key))
            elif choice == "2":
                  A   :  Tuple       		=				input('''Please enter the string to be decrypted: ''')
                  A   :  List[str]       		=				int(input('''Please enter off-set: ''').strip())

                  print(decrypt(input_string, key))
            elif choice == "3":
                  A   :  Optional[Any]       		=				input('''Please enter the string to be decrypted: ''')
                  A   :  Tuple       		=				brute_force(input_string)

                  for key, value in brute_force_data.items():
                        print(f"""Key: {key} | Message: {value}""")

            elif choice == "4":
                  print('''Goodbye.''')
                  break










'''simple docstring'''







import itertools






def    lowerCAmelCase__ (       lowerCamelCase  :    int = 1000000     ):
       _A  :			str											=      [1]

       for i in itertools.count(len(lowerCamelCase     )     ):
              _A  :			Optional[Any]											=      0
              for j in itertools.count(1     ):
                     _A  :			int											=      -1 if j % 2 == 0 else +1
                     _A  :			Optional[Any]											=      (j * j * 3 - j) // 2
                     if index > i:
                            break
                     item += partitions[i - index] * sign
                     item %= number
                     index += j
                     if index > i:
                            break
                     item += partitions[i - index] * sign
                     item %= number

              if item == 0:
                     return i
              partitions.append(lowerCamelCase     )

       return 0


if __name__ == "__main__":
   import doctest

   doctest.testmod()

   print(f"""{solution() = }""")






