Вступление
Боб любит иметь разные пароли для каждого сайта, который он использует. Он хочет пароли в специальном формате, чтобы он мог запомнить. Помогите ему, сгенерировав генератор паролей, максимально короткий по длине кода, потому что ему нравится делать короткие слова так же, как его имя.
Вызов
Постройте Боба генератор паролей, который принимает четыре параметра -
- Адрес домена, (например: stackexchange.com)
- Имя,
- фамилия,
- Дата и год рождения.
и выводит строку, которая подверглась следующим преобразованиям.
Каждый пароль имеет шаблон, основанный на длине l доменного имени. Если l простое, то шаблон имеет такую форму -
[birth-date][domain-name][lastname][birth-year][symbol]
иначе это имеет такую форму -
[symbol][birth-year][firstname][domain-name][birth-date]
,
Поле символа будет иметь значения в зависимости от типа домена.
.com -> $$$ .org -> &&& .net -> %%% .edu -> +++ .gov -> @@@ .mil -> >>> по умолчанию -> ~~~
Теперь он также хочет запустить шифр Цезаря над полями [firstname][domain-name][lastname]
. Направление сдвига правильное, если l простое, иначе оно слева. Значение сдвига определяется значением сложения даты рождения и года.
После вышеупомянутого процесса текст не может быть легко запомнен, поэтому он хочет, чтобы зашифрованный текст был произнесенным. Для этого он хочет заменить каждый третий последовательный согласный гласным в алфавитном порядке (т. Е. aeiou
).
Наконец, он хочет удалить последовательные вхождения одних и тех же букв.
пример
Входные данные - stackexchange.com Боб Уильямс 0894 Выходные данные - 08qraicvafyecugjigyoq94 $$$.
Пояснение:
Шаблон пароля есть [birth-date][domain-name][lastname][birth-year][symbol]
, потому что длина доменного имени stackexchange
простое. Символ будет $$$
как тип домена .com
.
Давайте заполним эти значения в шаблоне 08stackexchangewilliams94$$$
. Теперь Цезарь Шифр должен быть запущен на полях [firstname][domain-name][lastname]
(в данном случае это просто фамилия). Направление сдвига правильное, потому что l простое, а значение сдвига равно 08+94 = 102
.
Итак, 08stackexchangewilliams94$$$
превращается в 08qryaicvafylecugjjgykq94$$$
. Теперь каждый третий последовательный согласный заменяется гласным - 08qraaicvafyeecugjigyoq94$$$
все последующие вхождения одного и того же письма удаляются - 08qraicvafyecugjigyoq94$$$
. Не волнуйся, это произносится Бобом.
Дополнительная информация
- Адрес домена, имя и фамилия содержат только строчные буквы.
- Адрес домена всегда будет состоять только из домена второго уровня и домена верхнего уровня, как
stackexchange.com
и нетcodegolf.stackexchange.com
. Кроме того, домены, подобные.co.uk
, не разрешены, но только.uk
или.in
действительны. - Замена гласного в алфавитном порядке циклична. Я имею в виду после
u
,a
используется для замены. - Диапазон ASCII для шифра Цезаря составляет 97 - 122 включительно.
- Вы можете принять участие, как описано здесь .
- Выход должен быть строкой.
- Формат даты и года рождения есть
dd
и. Такyy
что02
приемлемо и2
нет.
Это код-гольф, поэтому выигрывает самый короткий код в байтах. Счастливого гольфа!
stackexchange.com
, неimg.stackexchange.com
? А как насчет страновых доменовbbc.co.uk
?0894
который добавляет до102
объяснения08+96=106
. Зашифрованный текст, кажется, использует102
значение. Просто небольшое несоответствие, которое может сбить с толку ...defualt
неdefault
Ответы:
PowerShell 3+,
480476474453450448 байтПопробуйте онлайн!
Сохранено
2426 байтов благодаря TimmyD !Вау, это был сумасшедший. Я не думаю, что смогу опубликовать полный анализ этого до позднего или завтрашнего дня.
Примечание: все окончания строки -
\n
(0x10
), так что мне не нужно использовать;
и поместить все это в одну строку.Краткая информация:
Поскольку сегмент не может быть длиннее 63 символов ( см. Также RFC 1035 ), я думаю, что было бы короче просто жестко закодировать список простых чисел :)Используя предложенный метод регулярных выражений.Invoke-Expression
(iex
), чтобы выполнить генерируется код emebedded, затем окончательная замена последовательных букв одной буквой.источник
-join
и мог поклясться, что он соединяется с пробелами, а не$null
с s, что удивило меня, но, просто попробовав это снова, получилось , как я и ожидал. Странно (и еще раз спасибо)!