Crie uma implementação da cifra de Atbash, um antigo sistema de criptografia criado no Oriente Médio.
A cifra de Atbash é uma cifra de substituição simples que consiste em inverter todas as letras do alfabeto, de modo que o alfabeto resultante fique de trás para frente. A primeira letra é substituída pela última, a segunda pela penúltima, e assim por diante.
Uma cifra de Atbash para o alfabeto latino seria assim:
Plain: abcdefghijklmnopqrstuvwxyz
Cipher: zyxwvutsrqponmlkjihgfedcba
É uma cifra muito fraca, porque só tem uma chave possível, e é uma cifra de substituição monoalfabética simples. No entanto, isso pode não ter sido um problema na época da cifra.
O texto cifrado é escrito em grupos de comprimento fixo, sendo o tamanho tradicional do grupo 5 letras, deixando os números inalterados, e a pontuação fica de fora. Isso serve para dificultar a dedução com base nos limites das palavras. Todo o texto será codificado com letras minúsculas.
test dá gvhg
x123 yes dá c123b vh
gvhg dá test
gsvjf rxpyi ldmul cqfnk hlevi gsvoz abwlt dá thequickbrownfoxjumpsoverthelazydog
Você precisa implementar as funções decode e encode, que decodificam e codificam uma String usando uma cifra Atbash.
Você pode usar a assinatura fornecida se estiver em dúvida sobre os tipos, mas não deixe que ela restrinja sua criatividade.
Este exercício trabalha com dados textuais. Por razões históricas, o tipo
String do Haskell é sinônimo de [Char], uma lista de caracteres. Para lidar
com dados textuais de forma mais eficiente, é possível usar o tipo Text.
Como extensão opcional deste exercício, você pode
- text à sua lista de dependências no package.yaml.Data.Text da seguinte
forma:import qualified Data.Text as T
import Data.Text (Text)
Text, por exemplo decode :: Text -> Text, e se referir aos
combinadores de Data.Text como, por exemplo, T.pack.Data.Text.String por Text em Atbash.hs, ou seja:decode :: Text -> Text
decode cipherText = ...
encode :: Text -> Text
encode plainText = ...
Esta parte é totalmente opcional.
Crie sua conta no Exercism para aprender e dominar Haskell com 107 exercícios e mentoria humana de verdade, tudo de graça.