Cifra Atbash

Cifra Atbash

Médio

Instruções

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.

Exemplos

  • Codificar test dá gvhg
  • Codificar x123 yes dá c123b vh
  • Decodificar gvhg dá test
  • Decodificar gsvjf rxpyi ldmul cqfnk hlevi gsvoz abwlt dá thequickbrownfoxjumpsoverthelazydog

Dicas

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

import qualified Data.Text as T
import           Data.Text (Text)
  • usar o tipo Text, por exemplo decode :: Text -> Text, e se referir aos combinadores de Data.Text como, por exemplo, T.pack.
  • consultar a documentação de Data.Text.
  • substituir todas as ocorrências de String por Text em Atbash.hs, ou seja:
decode :: Text -> Text
decode cipherText = ...

encode :: Text -> Text
encode plainText = ...

Esta parte é totalmente opcional.


Fonte

WikipediaO link abre em uma nova janela ou aba
Editar via GitHub O link abre em uma nova janela ou aba
Haskell Exercism

Tudo pronto para começar Cifra Atbash?

Crie sua conta no Exercism para aprender e dominar Haskell com 107 exercícios e mentoria humana de verdade, tudo de graça.