CMU Coding Bootcamp
at main 2.0 kB view raw
1def encodeRouteCipher(message: str, rows: int) -> str: 2 """Encode a message using the Route Cipher.""" 3 cur_char = "z" 4 while len(message) % rows != 0: 5 message += cur_char 6 cur_char = chr(ord(cur_char) - 1) 7 str_cols = [message[i : i + rows] for i in range(0, len(message), rows)] 8 str_rows = ["".join(col) for col in zip(*str_cols)] 9 encoded_message = f"{rows}" 10 for idx, row in enumerate(str_rows): 11 if idx % 2 == 0: 12 encoded_message += row 13 else: 14 encoded_message += row[::-1] 15 return encoded_message 16 17 18def decodeRouteCipher(encodedMessage: str) -> str: 19 """Decode a message encoded using the Route Cipher.""" 20 rows = int(encodedMessage[0]) 21 rows_len = len(encodedMessage[1:]) // rows 22 encoded_message = encodedMessage[1:] 23 str_rows = [ 24 encoded_message[i : i + rows_len] 25 for i in range(0, len(encoded_message), rows_len) 26 ] 27 str_rows = [row[::-1] if idx % 2 == 1 else row for idx, row in enumerate(str_rows)] 28 str_cols = ["".join(row) for row in zip(*str_rows)] 29 decoded_string = "".join(str_cols) 30 while decoded_string[-1].islower(): 31 decoded_string = decoded_string[:-1] 32 return decoded_string 33 34 35print("Testing encodeRouteCipher()...", end="") 36assert encodeRouteCipher("ASECRETMESSAGE", 4) == "4AREGESESETSzyAMC" 37assert encodeRouteCipher("ASECRETMESSAGE", 3) == "3ACTSGESMRSEEEAz" 38assert encodeRouteCipher("ASECRETMESSAGE", 5) == "5AESATSEMGEECRSz" 39assert encodeRouteCipher("ANOTHERSECRET", 4) == "4AHETzCENORRyxEST" 40 41 42print("Testing decodeRouteCipher()...", end="") 43assert decodeRouteCipher("4AREGESESETSzyAMC") == "ASECRETMESSAGE" 44assert decodeRouteCipher("3ACTSGESMRSEEEAz") == "ASECRETMESSAGE" 45assert decodeRouteCipher("5AESATSEMGEECRSz") == "ASECRETMESSAGE" 46assert decodeRouteCipher("4AHETzCENORRyxEST") == "ANOTHERSECRET" 47message = "SECRETSTUFFGOESHERE" 48encodedMessage = encodeRouteCipher(message, 6) 49plaintext = decodeRouteCipher(encodedMessage) 50assert plaintext == message 51print("Passed!")