import random import sys import time alpha_base = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz,. !=" def main(): ### Argument validation ### if len(sys.argv) < 7: print("Usage: uv run main.py [0-58] [0-58] [0-58] '[message]' 'e|d' [int]") sys.exit(1) base_max = len(alpha_base) if not is_number(sys.argv[1]) or not is_number(sys.argv[2]) or not is_number(sys.argv[3]): print("Invalid seed value.") sys.exit(1) if not is_number(sys.argv[6]): print("Invalid iterations value.") sys.exit(1) if int(sys.argv[1]) == 0 or int(sys.argv[1]) > base_max: seed1 = random.randint(1, base_max) else: seed1 = int(sys.argv[1]) if int(sys.argv[2]) == 0 or int(sys.argv[2]) > base_max: seed2 = random.randint(1, base_max) else: seed2 = int(sys.argv[2]) if int(sys.argv[3]) == 0 or int(sys.argv[3]) > base_max: seed3 = random.randint(1, base_max) else: seed3 = int(sys.argv[3]) if int(sys.argv[6]) < 0: iterations = 3 else: iterations = int(sys.argv[6]) ### Processing ### seed_values = [] if sys.argv[5] == "e": with open("seeds.txt", "w") as f: for iteration in range(0, iterations): random.seed(time.time()) seed_values.append(random.randint(1, base_max)) f.write(str(seed_values[iteration]) + "\n") f.close() if sys.argv[5] == "d": with open("seeds.txt", "r") as f: for iteration in range(0, iterations): seed = f.readline() seed_values.append(int(seed)) f.close() iteration_result = "" if sys.argv[5] == "e": print("Encoding!") for iteration in range(0, iterations): iteration_result = encode(seed_values[iteration], sys.argv[4]) # print("Seed:", iteration, "is", seed_values[iteration]) print("Result:", "\"" + iteration_result + "\"") elif sys.argv[5] == "d": print("Decoding!") for iteration in range(0, iterations): iteration_result = decode(seed_values[iteration], sys.argv[4]) # print("Seeds used:", seed1, seed2, seed3) print("Result:", "\"" + iteration_result + "\"") else: print("Invalid option!") sys.exit(1) def encode(offset, message): result_message = "" for index_a in range(len(message)): for index_b in range(len(alpha_base)): if message[index_a] == alpha_base[index_b]: location = index_b + offset if location > (len(alpha_base) - 1): location = location - (len(alpha_base) - 1) result_message = result_message + alpha_base[location] break return result_message def decode(offset, message): result_message = "" for index_a in range(len(message)): for index_b in range(len(alpha_base)): if message[index_a] == alpha_base[index_b]: location = index_b - offset if location < 0: location = location + (len(alpha_base) - 1) result_message = result_message + alpha_base[location] break return result_message def is_number(i): try: int(i) return True except ValueError: return False if __name__ == "__main__": main()