Skip to content

Instantly share code, notes, and snippets.

@naps62
Last active November 28, 2016 21:32
Show Gist options
  • Select an option

  • Save naps62/3fb6e90217f8ea063762489518440017 to your computer and use it in GitHub Desktop.

Select an option

Save naps62/3fb6e90217f8ea063762489518440017 to your computer and use it in GitHub Desktop.
Code Week 2016 Challenges

Escreve um programa o mais pequeno possível para decifrar mensagens. Podes usar C, C++, Java, Perl, Python3, Ruby 2.3.1, Pascal ou Haskell.

O teu objetivo é descodificar mensagens cifradas utilizando um método de dupla cifra. O método de cifrar é o seguinte:

  1. Removem-se todas as letras duplicadas da chave;
  2. Adiciona-se ao fim da chave as letras do alfabeto que faltam;
  3. Faz-se corresponder a cada letra da chave um número começando no valor;
  4. No fim disto temos uma tabela com o primeiro passo da substituição;
  5. Usando esta tabela, cifra-se o texto;
  6. Para criar a segunda tabela de substituição, usa-se como chave os algarismos do 0 ao 9, fazendo corresponder a cada algarismo vários valores preenchendo da esquerda para a direita;
  7. Para cada algarismo do texto cifrado, substitui-se por uma das letras possíveis.

Eis um exemplo de como o método funciona para cifrar uma mensagem com a chave ortogonal e o valor 87 para cifrar a mensagem codeweekaseriosonauminho:

  1. Tirar os duplicados à chave: ortgnal
  2. Adicionar as outras letras ortgnalbcdefhijkmpqsuvwxyz
  3. Fazer a tabela de substituição
 o  r  t  g  n  a  l  b  c  d  e  f  h  i   j   k   m   p   q   s   u   v   w   x   y   z
87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
  1. Proceder à substituição:
95 87 96 97 109 97 97 102 92 106 97 88 100 87 106 87 91 92 107 103 100 91 99 87
  1. Na realidade, os espaços entre os números não são utilizados:
95879697109979710292106978810087106879192107103100919987
  1. Criar a segunda tabela:
0 1 2 3 4 5 6 7 8 9
o r t g n a l b c d
e f h i j k m p q s
u v w x y z
  1. Usar a tabela para converter os algarismos em letras:
95879697109979710292106978810087106879192107103100919987
dkqpdmspfesdbdbretdwvomdpqcfeuqpfomqbsvdhvepvoxvoudrdsqp
  1. A mensagem codificada é dkqpdmspfesdbdbretdwvomdpqcfeuqpfomqbsvdhvepvoxvoudrdsqp.

O teu programa recebe duas linhas:

  1. Uma linha contendo a chave e o número separados por espaços;
  2. Uma linha contendo a mensagem que se pretende decifrar

Assim, se o input for:

ortogonal 87
skqbsmdpresspdbrotswfulsbcqroecbrelqbdrdhrubvogfoedrsdqp

O teu programa deverá imprimir:

codeweekaseriosonauminho

O objetivo desta tarefa é escrever um programa, utilizando o mínimo número de caracteres possível, para codificar uma mensagem secreta segundo a codificação César.

Podes usar C, C++, Java, Perl, Python3, Ruby 2.3.1, Pascal ou Haskell.

Nesta codificação, cada caractere será substituido pelo que aparece duas posições depois dele na tabela de ASCII.

O teu programa deve ler uma linha e imprimir a sua codificação. Se o teu programa receber a seguinte frase:

Lembra-te de tirar os espacos entre as palavras antes da codificacao Este deve imprimir o seguinte:

Ngodtc/vgfgvktctqugurcequgpvtgcurcncxtcucpvgufceqfkhkececq

O objectivo desta tarefa é escrever o programa com o número mínimo de caracteres possível para efetuar a codificação da dupla transposição.

Podes usar C, C++, Java, Perl, Python3, Ruby 2.3.1, Pascal ou Haskell.

Se o teu programa receber o seguinte input:

corvo
torrada
paraestatarefaenecessarioefetuaroprocessodaduplatransposicao

Isso quer dizer que a primeira chave é corvo, a segunda é torrada e a mensagem a cifrar é paraestatarefaenecessarioefetuaroprocessodaduplatransposicao.

As duas chaves são ordenadas para descobrir a ordem da transposição e, seguidamente, o texto é preenchido por linhas. Após isso, pegam-se nas colunas para criar o novo texto.

corvo
12453
parae
stata
refae
neces
sario
efetu
aropr
ocess
odadu
platr
anspo
sicao

Assim, o texto no fim da primeira passagem é:

psrnseaoopasateeafrcdlnieaesoursuroorafcreoeaascataeitpsdtpa

Agora fazemos a mesma coisa mais uma vez para a chave torrada:

torrada
7456132
psrnsea
oopasat
eeafrcd
lnieaes
oursuro
orafcre
oeaasca
taeitps
dtpa

Dando como resultado o seguinte texto cifrado:

ssraucstatdsoeaseacerrcpsoenureatrpairaaepnafesfaiapoeloootd
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment