CMU Coding Bootcamp
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!")