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