From e586c7e03df1ad2d64fcbab14aa2cd8e37c0e1f0 Mon Sep 17 00:00:00 2001 From: Eryn Wells Date: Sun, 19 Jul 2015 01:28:18 -0700 Subject: [PATCH] inverseEncode --- Enigma/Components.swift | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/Enigma/Components.swift b/Enigma/Components.swift index 710f171..6e3ef7b 100644 --- a/Enigma/Components.swift +++ b/Enigma/Components.swift @@ -17,6 +17,7 @@ enum EncoderError: ErrorType { protocol Encoder { func encode(c: Character) throws -> Character + func inverseEncode(c: Character) throws -> Character } @@ -54,6 +55,14 @@ class FixedRotor: Cryptor, Encoder { throw EncoderError.InvalidCharacter(ch: c) } } + + func inverseEncode(c: Character) throws -> Character { + if let offset = series.indexOf(c) { + return FixedRotor.alphabet[offset] + } else { + throw EncoderError.InvalidCharacter(ch: c) + } + } } @@ -109,6 +118,14 @@ class Rotor: FixedRotor { throw EncoderError.InvalidCharacter(ch: c) } } + + override func inverseEncode(c: Character) throws -> Character { + if let offset = series.indexOf(c) { + return Rotor.alphabet[(offset + ringPosition + position) % Rotor.alphabet.count] + } else { + throw EncoderError.InvalidCharacter(ch: c) + } + } } @@ -162,4 +179,8 @@ class Plugboard: Cryptor, Encoder { throw EncoderError.InvalidCharacter(ch: c) } } + + func inverseEncode(c: Character) throws -> Character { + return try encode(c) + } } \ No newline at end of file