Problema: 1249
Enunciado:
Escreva um programa que receba uma mensagem "secreta" e retorne esta mensagem codificada. A mensagem é codificada com uma cifra chamada rot13. Rot13 funciona da seguinte maneira, é atribuido para cada letra um índice, baseado em sua posição no alfabeto. a = 1, b = 2, c = 3, ..., z = 26. Cada letra da mensagem deve ser deslocada 13 posições para a direita, se o fim do alfabeto for atingido, a contagem recomeça no primeiro caracter do alfabeto. Por exemplo, o caracter "a" (aspas apenas para evidenciar), seria mapeado para "n", "y" para "l", "f" para "s", e assim por diante. O mesmo processo é feito para letras maiúsculas também. Quaisquer caracteres não-alfabéticos devem ser repassados para a saída sem alterações.
Linguagem: C++
Cada linha é percorrida procurando por letras. Quando a letra é encontrada, a função rot13 é chamada para trocar a letra para 13 letras posteriores. Caso a letra ultrapasse z, então é reiniciado a contagem em a.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | #include <iostream> using namespace std; bool minuscula(char aux){ if(aux >= 'a' and aux <= 'z') return true; else return false; } bool maiuscula(char aux){ if(aux >= 'A' and aux <= 'Z') return true; else return false; } char rot13(char aux){ char final_char; if(minuscula(aux)){ if(aux <= 'm'){ final_char = aux + 13; } else{ final_char = aux - 'z' + 'a' + 12; } }else{ if(aux <= 'M'){ final_char = aux + 13; } else{ final_char = aux - 'Z' + 'A' + 12; } } return final_char; } int main() { string line; while(getline(cin, line)){ string final_str = ""; for(int i=0; i<line.length();i++){ if(minuscula(line[i]) or maiuscula(line[i])){ final_str += rot13(line[i]); } else{ final_str += line[i]; } } cout << final_str << endl; } return 0; } |
Nenhum comentário:
Postar um comentário