Вступление:
У меня есть множество разных шифров, которые хранятся в документе, который я однажды скомпилировал в детстве, я выбрал несколько из тех, которые, по моему мнению, лучше всего подходили для испытаний (не слишком тривиально и не слишком сложно), и превратил их в задачи. Большинство из них все еще находятся в песочнице, и я пока не уверен, опубликую ли я их всех или только несколько. Вот второй ( Компьютерный Шифр был первым, который я отправил).
Для 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)
Ответы:
Желе ,
292625 байтПопробуйте онлайн!
Как это устроено
источник
;L3ḍƊ¡⁶µ⁶Øa;3ṗ¤,ðṚyZFs3⁸y
может покончить с тем,µ
если это приемлемо для 24.Древесный уголь , 39 байт
Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
источник
Python 2 ,
180176174165163 байтаПопробуйте онлайн!
Ввод может быть верхним или нижним. Вывод в верхнем регистре
источник
Pyth,
3433 байтаПолная программа. Ввод ожидается в нижнем регистре, вывод - массив символов. Попробуйте онлайн здесь или проверьте все тестовые примеры сразу здесь .
Альтернативное 34-байтовое решение:
sm@+G;id3csCm.[03jx+G;d3+W!%lz3zd3
- вместо +27 и tail, используется.[03
для заполнения от 0 до длины 3. Может быть 33, если ведущийs
отброшен.Редактировать: сохранил байт, отбросив ведущий, так
s
как символьные массивы верныисточник
Рубин ,
153145138131 байтПопробуйте онлайн!
Быстрый и наивный подход, работает со строчными буквами. Входы и выходы массивов символов.
источник
Java (JDK) , 192 байта
Попробуйте онлайн!
Очень наивный подход. Принимает нижний регистр в
char[]
качестве входных данных , но выводитString
.Пояснения
кредиты
источник
Integer.valueOf
Byte.valueOf
R+=c<26?(char)(c+97):' ';
R+=(char)(c<26?c+97:32);
R 145 байтов
Попробуйте онлайн!
Ввод / вывод в виде строк; добавляет один пробел Странное повторение в
[,3:1]
том, что естественная индексация массива R несколько отличается.источник
APL + WIN, 102 байта
Объяснение:
Пример снимка экрана тестового примера:
источник
SAS, 305 байт
Сытное «богатство» для этого чудовища SAS. Было много случайного форматирования строк, и я думал, что смогу избежать этого; Я уверен, что есть лучшие способы сделать это.
Ввод вводится на новых строках после выписки карт, например:
Выводит набор данных, содержащий выходные данные в переменной
f
, вместе с набором вспомогательных переменных / значений массива.Ungolfed / объяснение:
источник
JavaScript (Node.js) ,
146 141 139136 байтВвод / вывод в нижнем регистре.
Попробуйте онлайн!
комментарии
источник
(o=...,++i)%3
снова работает в JS? Является(o,i)
ли кортеж или что-то еще, и оба внутренних целых числа преобразуются в их модуль-3? Как Java-разработчик, это все еще немного смущает меня, чтобы увидеть(a,b)%c
. Хороший ответ, хотя! Мне нравится, как вы конвертируете каждую третью цифру, а затем удаляете первые два нулевых байта. +1 от меня.++i
.05AB1E , 25 байтов
Поскольку никто еще не опубликовал ответ 05AB1E, я решил опубликовать собственное решение. Теперь я вижу, что это очень похоже на ответ @ Dennis ♦ 'Jelly , хотя я и придумал его самостоятельно, прежде чем опубликовать задание.
Ввод в виде строки, вывод в виде списка символов. Добавляет один пробел, если длина делится на 3.
Попробуйте онлайн или проверьте все контрольные примеры .
Объяснение:
источник
Japt , 42 байта
Попробуйте онлайн!
В основе этого ответа лежит удаленный ответ Шегги, но он никогда не возвращался для обработки входных данных длины, кратной 3, так что это фиксированная версия .
Объяснение:
источник
C # (интерактивный компилятор Visual C #) , 178 байт
Попробуйте онлайн!
Менее гольф ... Это все еще сбивает с толку :)
источник