Вступление:
У меня есть множество разных шифров, которые хранятся в документе, который я однажды скомпилировал в детстве, я выбрал несколько из тех, которые, по моему мнению, лучше всего подходили для испытаний (не слишком тривиально и не слишком сложно), и превратил их в задачи. Большинство из них все еще находятся в песочнице, и я пока не уверен, опубликую ли я их всех или только несколько. Вот второй ( Компьютерный Шифр был первым, который я отправил).
Для Trifid Cipher (без использования ключевого слова) алфавит (и дополнительный подстановочный знак) разделен на три таблицы 3 на 3:
table 1: table 2: table 3:
|1 2 3 |1 2 3 |1 2 3
-+----- -+----- -+-----
1|a b c 1|j k l 1|s t u
2|d e f 2|m n o 2|v w x
3|g h i 3|p q r 3|y z
Текст, который мы хотим зашифровать, является первым символом за символом, закодированным в числах столбца строки таблицы. Например, текст this is a trifid cipher
становится:
t h i s i s a t r i f i d c i p h e r
table: 3 1 1 3 3 1 3 3 1 3 3 2 1 1 1 1 3 1 1 2 1 1 2
row: 1 3 3 1 3 3 1 3 1 3 1 3 3 2 3 2 3 1 3 3 3 2 3
column: 2 2 3 1 3 3 1 3 1 3 2 3 3 3 3 1 3 3 3 1 2 2 3
Затем мы помещаем все подряд один за другим в таблице выше группами по три:
311 331 331 332 111 131 121 121 331 331 313 133 232 313 332 322 313 313 132 333 313 331 223
И они преобразуются обратно в символы, используя те же таблицы:
s y y z a g d d y y u i q u z w u u h u y o
Стоит отметить, что значение input-length должно быть взаимно простым с 3. Таким образом, если длина кратна 3, мы добавляем один или два конечных пробела, чтобы длина input больше не была кратна 3.
Вызов:
Получив строку sentence_to_encipher
, зашифруйте ее, как описано выше.
Вам нужно только шифровать данные sentence_to_encipher
, поэтому не нужно создавать программу / функцию дешифрования. Тем не менее, я мог бы сделать вызов части 2 для расшифровки в будущем (хотя у меня есть ощущение, что это тривиально / похоже на процесс шифрования).
Правила соревнований:
- Вы можете предполагать, что
sentence_to_encipher
завещание будет содержать только буквы и пробелы. - Вы можете использовать либо строчные, либо прописные буквы (укажите, какой из них вы использовали в своем ответе).
- Вы можете добавить один или два завершающих пробела, когда длина ввода равна 3, чтобы больше не быть кратным 3.
- Ввод / вывод является гибким. И вход, и выход могут быть строкой, списком / массивом / потоком символов и т. Д.
Основные правила:
- Это код-гольф , поэтому выигрывает самый короткий ответ в байтах.
Не позволяйте языкам кода-гольфа отговаривать вас от публикации ответов на языках, не относящихся к кодексу. Попробуйте придумать как можно более короткий ответ для «любого» языка программирования. - Стандартные правила применяются к вашему ответу с правилами ввода / вывода по умолчанию , поэтому вам разрешено использовать STDIN / STDOUT, функции / метод с правильными параметрами и типом возврата, полные программы. Ваш звонок.
- По умолчанию лазейки запрещены.
- Если возможно, добавьте ссылку с тестом для вашего кода (например, TIO ).
- Кроме того, добавление объяснения для вашего ответа настоятельно рекомендуется.
Тестовые случаи:
Input: "this is a trifid cipher"
Output: "syyzagddyyuiquzwuuh uyo"
Input: "test"
Output: "utbk"
Input: "output"
Possible outputs: "rrvgivx" (one space) or "rrzcc lr" (two spaces)
Input: "trifidcipher"
Possible output: "vabbuxlzz utr" (one space) or "vabbyzv rx ie " (two spaces)