Updated README and cleaned up the code some. Added type hints.

This commit is contained in:
Kenn Kitchen
2025-10-26 13:34:05 -04:00
parent f8b5b6b577
commit bc49b72c9e
2 changed files with 54 additions and 52 deletions

64
main.py
View File

@@ -2,48 +2,32 @@ import random
import sys
import time
alpha_base = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz,. !="
# define the full range of characters used by this program
alpha_base: str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz,. !="
# MAIN
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]")
if len(sys.argv) < 4:
print("Usage: uv run main.py \"[message]\" e|d [int]")
sys.exit(1)
base_max = len(alpha_base)
base_max: int = 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]):
if not is_number(sys.argv[3]):
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:
if int(sys.argv[3]) == 0:
iterations = 3
else:
iterations = int(sys.argv[6])
iterations = int(sys.argv[3])
### Processing ###
seed_values = []
seed_values: list[int] = []
if sys.argv[5] == "e":
if sys.argv[2] == "e":
with open("seeds.txt", "w") as f:
for iteration in range(0, iterations):
random.seed(time.time())
@@ -51,36 +35,34 @@ def main():
f.write(str(seed_values[iteration]) + "\n")
f.close()
if sys.argv[5] == "d":
if sys.argv[2] == "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 = ""
iteration_result: str = ""
if sys.argv[5] == "e":
if sys.argv[2] == "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])
iteration_result = encode(seed_values[iteration], sys.argv[1])
print("Result:", "\"" + iteration_result + "\"")
elif sys.argv[5] == "d":
elif sys.argv[2] == "d":
print("Decoding!")
for iteration in range(0, iterations):
iteration_result = decode(seed_values[iteration], sys.argv[4])
iteration_result = decode(seed_values[iteration], sys.argv[1])
# print("Seeds used:", seed1, seed2, seed3)
print("Result:", "\"" + iteration_result + "\"")
else:
print("Invalid option!")
sys.exit(1)
def encode(offset, message):
result_message = ""
def encode(offset: int, message: str) -> str:
result_message: str = ""
for index_a in range(len(message)):
for index_b in range(len(alpha_base)):
@@ -94,8 +76,8 @@ def encode(offset, message):
return result_message
def decode(offset, message):
result_message = ""
def decode(offset: int, message: str) -> str:
result_message: str = ""
for index_a in range(len(message)):
for index_b in range(len(alpha_base)):
@@ -109,7 +91,7 @@ def decode(offset, message):
return result_message
def is_number(i):
def is_number(i) -> bool:
try:
int(i)
return True