inverseEncode
This commit is contained in:
parent
586eacb2b5
commit
e586c7e03d
1 changed files with 21 additions and 0 deletions
|
@ -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)
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue