Cria uma implementação da cifra Atbash, um antigo sistema de encriptação criado no Médio Oriente.
A cifra Atbash é uma cifra de substituição simples que se baseia em transpor todas as letras do alfabeto de modo a que o alfabeto resultante fique ao contrário. A primeira letra é substituída pela última, a segunda pela penúltima, e assim sucessivamente.
Uma cifra Atbash para o alfabeto latino seria a seguinte:
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, isto 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 de 5 letras, deixando os números inalterados, e a pontuação é excluída. Isto serve para tornar mais difícil adivinhar coisas com base nos limites das palavras. Todo o texto será codificado em letras minúsculas.
test dá gvhg
x123 yes dá c123b vh
gvhg dá test
gsvjf rxpyi ldmul cqfnk hlevi gsvoz abwlt dá thequickbrownfoxjumpsoverthelazydog
Tens de implementar as funções decode e encode, que descodificam e codificam uma String com uma cifra Atbash.
Podes usar a assinatura fornecida se não tiveres a certeza dos tipos, mas não deixes que isso restrinja a tua criatividade.
Este exercício trabalha com dados textuais. Por razões históricas, o tipo
String de Haskell é sinónimo de [Char], uma lista de carateres. Para um
tratamento mais eficiente de dados textuais, podes usar o tipo Text.
Como extensão opcional deste exercício, podes
- text à tua 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 referir-te aos
combinadores de Data.Text como, por exemplo, T.pack.Data.Text.String por Text no Atbash.hs, ou seja:decode :: Text -> Text
decode cipherText = ...
encode :: Text -> Text
encode plainText = ...
Esta parte é totalmente opcional.
Inscreve-te no Exercism para aprenderes e dominares Haskell com 107 exercícios, e mentoria humana real, tudo grátis.