Вступ:
У мене є багато різних шифрів, що зберігаються в документі, який я колись складав у дитинстві, я вибрав декілька тих, на які я вважав, що найкраще підходять для викликів (не надто банальні та не надто жорсткі) та перетворив їх на виклики. Більшість з них досі перебувають у пісочниці, і я ще не впевнений, чи опублікую їх усі, або лише декілька. Ось другий ( Комп'ютерний шифр був першим, який я розмістив).
Для шифру Trifid (без використання ключового слова) алфавіт (та додатковий підстановочний знак) ділиться на три 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
Слід зазначити, що вхідна довжина повинна бути одночасно 3. Отже, якщо довжина кратна 3, ми додаємо один або два пробіли, щоб довжина вводу більше не була кратною 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)