Задача e-olymp 378.
Условие
Недавно Маша и Катя узнали, что в мире существуют злые хакеры, которые могут запросто вскрыть чужую переписку. Поэтому решили они пересылать только зашифрованные сообщения. Для этой цели подруги стали использовать перестановочный код, где каждая буква заменяется другой. Например:
Закодированное сообщение: HPC PJVYMIY
Декодированное сообщение: ACM CONTEST
В этом примере выполнены следующие замены: H=A, P=C, C=M, J=O, V=N, Y=T, M=E иI=S.
Чтобы не заниматься кодированием и декодированием вручную, подруги просят Вас написать программу. Помогите девочкам!
Входные данные
В первой строке входного файла записано закодированное сообщение. Вторая строка –26 латинских букв верхнего регистра, представляющих собой код для соответствующего символа алфавита: первый символ дает код для A, второй для B и так далее. Используются только буквы верхнего регистра. В закодированном сообщении могут появиться пробелы, которые должны быть сохранены в выходной строке.
Выходные данные
В выходной файл вывести одну строку, в которой содержится расшифрованное сообщение.
Тесты
Входные данные | Выходные данные |
HPC PJVYMIYBLMRGJIASOPZEFDCKWYHUNXQTV | ACM CONTEST |
FDY GAI BG UKMY KIMHOTSQYRLCUZPAGWJNBVDXEF |
THE SKY IS BLUE |
LJBSLJL IJWWDEJ KCFAGWRZMEXDNUYHVBOIJLSTPQ |
DECODED MESSAGE |
Код
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 |
import java.util.*; import java.lang.*; import java.io.*; class Ideone { public static void main (String[] args) throws java.lang.Exception { Scanner scanner = new Scanner(System.in); String message, cipher; message = scanner.nextLine(); cipher = scanner.nextLine(); char[] decoded = new char [message.length()]; for (int i = 0; i < message.length(); i++) { if (message.charAt(i) == ' ') { decoded[i] = ' '; } else { decoded[i] = cipher.charAt(findIndex(message.charAt(i))); } } System.out.println(decoded); } static int findIndex(char c) { String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; for (int i = 0; i < alphabet.length(); i++) { if (c == alphabet.charAt(i)) { return i; } } return -1; } } |
Решение
Чтоб расшифровать послание, нужно определить порядковый номер каждого символа, из введённого сообщения, в алфавите. Потом заменить их символом соответствующего порядкового номера из второй введённой строки.