Trilhas
/
Haskell
Haskell
/
Exercícios
/
Cifra rotacional
Cifra rotacional

Cifra rotacional

Médio

Instruções

Crie uma implementação da cifra rotacional, também chamada às vezes de cifra de César.

A cifra de César é uma cifra de deslocamento simples que se baseia em deslocar todas as letras do alfabeto usando uma chave inteira entre 0 e 26. Usar uma chave 0 ou 26 sempre produz o mesmo resultado por causa da aritmética modular. Cada letra é deslocada pela quantidade de posições indicada pelo valor da chave.

A notação geral das cifras rotacionais é ROT + <key>. A cifra rotacional mais usada é a ROT13.

Uma ROT13 no alfabeto latino seria assim:

Plain:  abcdefghijklmnopqrstuvwxyz
Cipher: nopqrstuvwxyzabcdefghijklm

Ela é mais forte que a cifra Atbash porque tem 27 chaves possíveis e 25 chaves utilizáveis.

O texto cifrado é escrito com a mesma formatação da entrada, incluindo espaços e pontuação.

Exemplos

  • ROT5 omg resulta em trl
  • ROT0 c resulta em c
  • ROT26 Cool resulta em Cool
  • ROT13 The quick brown fox jumps over the lazy dog. resulta em Gur dhvpx oebja sbk whzcf bire gur ynml qbt.
  • ROT13 Gur dhvpx oebja sbk whzcf bire gur ynml qbt. resulta em The quick brown fox jumps over the lazy dog.

Dicas

Você precisa implementar a função rotate, que recebe um Int e uma String e então as codifica usando uma cifra rotacional. 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 de Haskell é sinônimo de [Char], uma lista de caracteres. Para um tratamento mais eficiente de dados textuais, pode-se 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 rotate :: Int -> 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 RotationalCipher.hs, ou seja:
rotate :: Int -> Text -> Text

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 rotacional?

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