Вступление:
У меня есть множество разных шифров, которые хранятся в документе, который я однажды скомпилировал в детстве, я выбрал несколько из тех, которые, по моему мнению, лучше всего подходили для испытаний (не слишком тривиально и не слишком сложно), и превратил их в задачи. Большинство из них все еще находятся в песочнице, и я пока не уверен, выложу ли я все из них или только несколько. Но вот первый из них, чтобы начать вещи.
Компьютерный Шифр зашифрует данный текст в «случайные» группы символов данного length
. Если такая группа содержит цифру, она будет использовать эту цифру для индексации в своей собственной группе для зашифрованного символа. Если в группе нет цифр, это означает, что используется первый символ.
Например, допустим, мы хотим зашифровать текст this is a computer cipher
с заданной длиной 5
. Это потенциальный результат (примечание: числа приведены в 1 в следующем примере):
t h i s i s a c o m p u t e r c i p h e r (without spaces of course, but added as clarification)
qu5dt hprit k3iqb osyw2 jii2o m5uzs akiwb hwpc4 eoo3j muxer z4lpc 4lsuw 2tsmp eirkr r3rsi b5nvc vid2o dmh5p hrptj oeh2l 4ngrv (without spaces of course, but added as clarification)
Давайте возьмем несколько групп в качестве примеров, чтобы объяснить, как расшифровать группу:
qu5dt
Эта группа содержит цифру5
, так что (1-индексированный) пятый символ этой группы является символ , используемый для расшифрованного текста:t
.hprit
Эта группа не содержит цифр, поэтому первый символ этой группы неявно используются для расшифрованного текста:h
.osyw2
: Эта группа содержит цифру2
, так что (1-индексированный) второй символ этой группы является символ , используемый для расшифрованного текста:s
.
Вызов:
Учитывая целое число length
и строку word_to_encipher
, выведите случайную зашифрованную строку, как описано выше.
Вам нужно только зашифровать с учетом length
и word_to_encipher
, так что нет необходимости создавать программу / функцию дешифрования. Я мог бы сделать часть 2 вызов для расшифровки в будущем, однако.
Правила вызова:
- Вы можете предположить, что
length
будет в диапазоне[3,9]
. - Вы можете предположить, что
word_to_encipher
завещание будет содержать только буквы. - Вы можете использовать либо строчные, либо прописные буквы (укажите, какой из них вы использовали в своем ответе).
- Ваши выводы, каждая группа и позиции цифр в группе (если они есть) должны быть равномерно случайными . Таким образом, все случайные буквы алфавита имеют одинаковую вероятность возникновения; позиция зашифрованной буквы в каждой группе имеет одинаковую вероятность появления; и позиция цифры имеет такую же вероятность появления (за исключением случаев, когда это первый символ и цифры не присутствуют; и она, очевидно, не может находиться в той же позиции, что и зашифрованный символ).
- Вам также разрешено использовать 0-индексированные цифры вместо 1-индексированных. Пожалуйста, укажите, какой из двух вы использовали в своем ответе.
- Цифра
1
(или0
0-индексированная) никогда не будет присутствовать в выходных данных. Такb1ndh
что не является допустимой группой для шифрования символа «b». Тем не менее,b4tbw
является действительным, где4
зашифровываетb
на 4 - м (1-индексированного) положении, а также другие символыb
,t
,w
являются случайными (который по совпадению также содержитb
). Другие возможные действительные группыlength
5 , чтобы зашифровать символ «B» являются:abcd2
,ab2de
,babbk
,hue5b
и т.д.
Основные правила:
- Это код-гольф , поэтому выигрывает самый короткий ответ в байтах.
Не позволяйте языкам кода-гольфа отговаривать вас от публикации ответов на языках, не относящихся к кодексу. Попробуйте найти как можно более короткий ответ для «любого» языка программирования. - Стандартные правила применяются к вашему ответу с правилами ввода / вывода по умолчанию , поэтому вы можете использовать STDIN / STDOUT, функции / метод с правильными параметрами и типом возврата, полные программы. Ваш звонок.
- По умолчанию лазейки запрещены.
- Если возможно, добавьте ссылку с тестом для вашего кода (например, TIO ).
- Кроме того, добавление объяснения для вашего ответа настоятельно рекомендуется.
Тестовые случаи:
Input:
Length: 5
Word to encipher: thisisacomputercipher
Possible output:
qu5dthpritk3iqbosyw2jii2om5uzsakiwbhwpc4eoo3jmuxerz4lpc4lsuw2tsmpeirkrr3rsib5nvcvid2odmh5phrptjoeh2l4ngrv
Input:
Length: 8
Word to encipher: test
Possible output:
ewetng4o6smptebyo6ontsrbtxten3qk
Input:
Length: 3
Word to encipher: three
Possible output:
tomv3h2rvege3le
abcd2
, ab2de
, babbk
все же? И b1akk
действует?
b1akk
я бы сказал, нет. Отредактируйте его в описании задачи, чтобы уточнить. Если первый символ является зашифрованным, цифра не должна присутствовать.
"a??"
имеет 676 возможных результатов, но "1a?"
, "?a1"
, "2?a"
, "?2a"
, имеет only104 результаты. Итак, если я пытаюсь выбрать один результат из всех этих 780 результатов, распределение «положения зашифрованной буквы» будет 13: 1: 1, а не 1: 1: 1. И я бы отнесся к этому как к "равномерно случайной" работе.