CMU Coding Bootcamp
at main 2.3 kB view raw
1from math import ceil 2from string import ascii_lowercase 3 4 5def getIndex(row: int, col: int, rows: int) -> int: 6 return col * rows + row 7 8 9def getRowAndCol(x: int, rows: int) -> tuple[int, int]: 10 return x // rows, x % rows 11 12 13def encodeRouteCipher(message: str, rows: int) -> str: 14 row_len = ceil(len(message) / rows) 15 missing_chars = row_len * rows - len(message) 16 message += "".join(reversed(ascii_lowercase))[:missing_chars] 17 encoded_string = "" 18 for i in range(len(message)): 19 row, col = getRowAndCol(i, row_len) 20 encoded_string += message[getIndex(row, col, rows)] 21 encoded_message = f"{rows}" 22 for i in range(0, rows): 23 if i % 2 == 0: 24 encoded_message += encoded_string[i * row_len : (i + 1) * row_len] 25 else: 26 encoded_message += encoded_string[i * row_len : (i + 1) * row_len][::-1] 27 return encoded_message 28 29 30def decodeRouteCipher(encodedMessage: str) -> str: 31 decoded_message = "" 32 rows = int(encodedMessage[0]) 33 encoded_string = encodedMessage[1:] 34 row_len = ceil(len(encoded_string) / rows) 35 decoded_string = "" 36 for i in range(rows): 37 if i % 2 == 0: 38 decoded_string += encoded_string[i * row_len : (i + 1) * row_len] 39 else: 40 decoded_string += encoded_string[i * row_len : (i + 1) * row_len][::-1] 41 for i in range(len(decoded_string)): 42 row, col = getRowAndCol(i, rows) 43 decoded_message += decoded_string[getIndex(row, col, row_len)] 44 return decoded_message.rstrip(ascii_lowercase) 45 46 47print("Testing encodeRouteCipher()...", end="") 48assert encodeRouteCipher("ASECRETMESSAGE", 4) == "4AREGESESETSzyAMC" 49assert encodeRouteCipher("ASECRETMESSAGE", 3) == "3ACTSGESMRSEEEAz" 50assert encodeRouteCipher("ASECRETMESSAGE", 5) == "5AESATSEMGEECRSz" 51assert encodeRouteCipher("ANOTHERSECRET", 4) == "4AHETzCENORRyxEST" 52 53 54print("Testing decodeRouteCipher()...", end="") 55assert decodeRouteCipher("4AREGESESETSzyAMC") == "ASECRETMESSAGE" 56assert decodeRouteCipher("3ACTSGESMRSEEEAz") == "ASECRETMESSAGE" 57assert decodeRouteCipher("5AESATSEMGEECRSz") == "ASECRETMESSAGE" 58assert decodeRouteCipher("4AHETzCENORRyxEST") == "ANOTHERSECRET" 59message = "SECRETSTUFFGOESHERE" 60encodedMessage = encodeRouteCipher(message, 6) 61plaintext = decodeRouteCipher(encodedMessage) 62assert plaintext == message 63print("Passed!")