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