enum Mode { case encrypt case decrypt } class Chaocipher { private static let L_ALPHABET = "HXUCZVAMDSLKPEFJRIGTWOBNYQ" private static let R_ALPHABET = "PTLNBQDEOYSFAVZKGJRIHWXUMC" private static func indexOf(array: [Character], char: Character) -> Int { for i in 0.. String { var left = Array(L_ALPHABET) var right = Array(R_ALPHABET) var eText = [Character](repeating: " ", count: text.count) var temp = [Character](repeating: " ", count: 26) let textChars = Array(text) for i in 0.. String { return exec(text: text, mode: .encrypt, showSteps: showSteps) } static func decrypt(text: String, showSteps: Bool = false) -> String { return exec(text: text, mode: .decrypt, showSteps: showSteps) } } // Main program let plainText = "WELLDONEISBETTERTHANWELLSAID" print("The original plaintext is : \(plainText)") print("\nThe left and right alphabets after each permutation during encryption are:") let cipherText = Chaocipher.encrypt(text: plainText, showSteps: true) print("\nThe cipher text is : \(cipherText)") let plainText2 = Chaocipher.decrypt(text: cipherText) print("\nThe recovered plaintext is : \(plainText2)")