Percursos
/
Haskell
Haskell
/
Exercícios
/
Cifra rotativa
Cifra rotativa

Cifra rotativa

Médio

Instruções

Cria uma implementação da cifra rotacional, também conhecida por cifra de César.

A cifra de César é uma cifra de deslocamento simples que se baseia em transpor todas as letras do alfabeto através de uma chave inteira entre 0 e 26. Usar uma chave 0 ou 26 produz sempre o mesmo resultado, devido à aritmética modular. A letra é deslocada tantas posições quantas o 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

É mais forte do que a cifra Atbash porque tem 27 chaves possíveis, das quais 25 são utilizáveis.

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

Exemplos

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

Dicas

Precisas de implementar a função rotate, que recebe um Int e uma String e depois os codifica com uma cifra rotativa. Podes usar a assinatura fornecida se tiveres dúvidas quanto aos tipos, mas não deixes que isso limite a tua 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 carateres. Para um tratamento mais eficiente de dados textuais, podes usar o tipo Text.

Como extensão opcional deste exercício, podes

import qualified Data.Text as T
import           Data.Text (Text)
  • usar o tipo Text, por exemplo rotate :: Int -> Text -> Text, e referir-te 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 numa nova janela ou separador
Editar via GitHub A ligação abre numa nova janela ou separador
Haskell Exercism

Estás pronto para começar Cifra rotativa?

Inscreve-te no Exercism para aprenderes e dominares Haskell com 107 exercícios, e mentoria humana real, tudo grátis.