Вступление:
У меня есть множество разных шифров, которые хранятся в документе, который я однажды скомпилировал в детстве, я выбрал несколько из тех, которые, по моему мнению, лучше всего подходили для испытаний (не слишком тривиально и не слишком сложно), и превратил их в задачи. Большинство из них все еще находятся в песочнице, и я пока не уверен, выложу ли я все из них или только несколько. Вот третий и самый простой (после Computer Cipher и Trifid Cipher, который я опубликовал ранее).
С Шифром Часов мы используем следующее изображение для шифрования текста:
Так что предложение вроде this is a clock cipher
бы стало:
t h i s i s a c l o c k c i p h e r (without additional spaces of course, but added as clarification)
19:7:8:18:00:8:18:00:AM:00:2:11:14:2:10:00:2:8:15:7:4:17
Вызов:
Получив строку sentence_to_encipher
, зашифруйте ее, как описано выше.
Правила вызова:
- Вы можете предполагать, что
sentence_to_encipher
завещание будет содержать только буквы и пробелы. - Вы можете использовать либо строчные, либо прописные буквы (укажите, какой из них вы использовали в своем ответе).
- Вы не можете добавить ведущие нули для одной цифры шифрованных писем
b
черезj
, но два нуля00
является обязательным для пространств. - Вы должны использовать в
:
качестве разделителя, и дополнительный ведущий или трейлинг:
не допускается. - Вам разрешено использовать строчные буквы,
am
аpm
не прописныеAM
иPM
, если это не противоречит.
Основные правила:
- Это код-гольф , поэтому выигрывает самый короткий ответ в байтах.
Не позволяйте языкам кода-гольфа отговаривать вас от публикации ответов на языках, не относящихся к кодексу. Попробуйте найти как можно более короткий ответ для «любого» языка программирования. - Стандартные правила применяются к вашему ответу с правилами ввода / вывода по умолчанию , поэтому вы можете использовать STDIN / STDOUT, функции / метод с правильными параметрами и типом возврата, полные программы. Ваш звонок.
- По умолчанию лазейки запрещены.
- Если возможно, добавьте ссылку с тестом для вашего кода (например, TIO ).
- Кроме того, добавление объяснения для вашего ответа настоятельно рекомендуется.
Тестовые случаи:
Input: "this is a clock cipher"
Output: "19:7:8:18:00:8:18:00:AM:00:2:11:14:2:10:00:2:8:15:7:4:17"
Input: "test"
Output: "19:4:18:19"
Input: "what time is it"
Output: "22:7:AM:19:00:19:8:12:4:00:8:18:00:8:19"
Input: "acegikmoqsuwy bdfhjlnprtvxz"
Output: "AM:2:4:6:8:10:12:14:16:18:20:22:24:00:1:3:5:7:9:11:13:15:17:19:21:23:PM"
Input: "easy peazy"
Output: "4:AM:18:24:00:15:4:AM:PM:24"
[7, ":", 8, ":", "00", ":", 1, ":", 14, ":", 1]
дляhi bob
или нужно присоединиться к результату? Кстати, аккуратный шифр!['7', ':', '8', ':', '0', '0', ':', '1', ':', '1', '4', ':', '1']
).Ответы:
Python 2 ,
7472 байтаПопробуйте онлайн!
Принимает ввод как все строчные
источник
05AB1E ,
2221 байтПопробуйте онлайн! или как тестовый набор
Некоторые альтернативные 21- байтовые решения:
источник
ª
это изменилось :)Perl 6 , 47 байт
Попробуйте онлайн!
Анонимный Любая лямбда, которая принимает строку в любом случае и возвращает зашифрованную строку.
Объяснение:
источник
Pyth, 25 байт
Попробуйте онлайн здесь или проверьте все тестовые примеры сразу здесь .
источник
JavaScript (Node.js) , 72 байта
Принимает ввод в нижнем регистре.
Попробуйте онлайн!
источник
Java (JDK) , 95 байт
Попробуйте онлайн!
кредиты
источник
char
доvar
. :)C # (интерактивный компилятор Visual C #) , 70 байт
Принимает ввод в виде строчных букв. Сначала проверяется, является ли символ пробелом, и если это так, преобразует его в
00
. Затем он проверяет, является ли символ A, и преобразует его вAM
. Он снова проверяет Z и преобразует его вPM
если оно есть. Наконец, если символ проходит все проверки, он конвертируется в алфавитный порядок-1.-2 байта благодаря @dana
Попробуйте онлайн!
источник
Рубин , 49 байтов
Попробуйте онлайн!
Perl от Джо Кинга . Принимает ввод как массив символов, возвращает строку с AM / PM в верхнем регистре.
источник
Красный ,
124121110109 байтПопробуйте онлайн!
источник
05AB1E , 20 байтов
Сильно вдохновлен 22-байтовым @ Mr.Xcoder в комментарии к существующему ответу 05AB1E @Emigna .
Принимает ввод как список строчных символов (будет 21 байт с лидирующим
S
символом, если я возьму ввод в виде строки).Попробуйте онлайн или проверьте все контрольные примеры .
Объяснение:
источник
Tcl , 100 байт
Попробуйте онлайн!
источник
C # (интерактивный компилятор Visual C #) , 98 байт
Принимает ввод в виде (нижнего регистра) массива символов. Попробуйте онлайн!
источник
s=>string.Join(':',s.Select(c=>new[]{c-97+"","AM","PM","00"}["az ".IndexOf(c)+1]))
.Древесный уголь , 26 байт
Попробуйте онлайн! Ссылка на подробную версию кода. Принимает ввод в нижнем регистре (можно тривиально изменить на верхний регистр). Объяснение:
Установите фоновый символ на
:
. Это заполняет промежутки между выходными значениями, созданными правильным движением.Зацикливайтесь на каждом персонаже, оставляя пробел каждый раз. (Первый ход не имеет никакого эффекта, так как холст все еще пуст.)
Включите символ и, если это пробел,
a
илиz
выведите соответствующий код. Я использую×0²
вместо этого,00
поскольку последний будет стоить два байта в дополнительных разделителях.В противном случае выведите позицию буквы 0 в алфавите строчных букв в виде строки.
источник
Желе , 24 байта
Попробуйте онлайн!
источник